
SQLで重複を除去したいのですが、DISTINCTやGROUP BYも検討したのですが、どうしても良い方法が見つからなかったので質問させて頂きます。
テーブルの構成は以下のようになっています。
roomsテーブル
id(INTEGER)
public(BOOLEAN)
updated_at(DATETIME)
created_at(DATETIME)
messagesテーブル
id(INTEGER)
sendfrom_list_id(INTEGER)
sendto_list_id(INTEGER)
room_id(INTEGER)※roomsテーブルへの外部キー
body(STRING)
updated_at(DATETIME)
created_at(DATETIME)
更に条件は以下のようになっています。
・アウトプットとして得たいのは
rooms.updated_at
rooms.id
rooms.public
messages.room_id
messages.sendfrom_list_id
messages.sendto_list_id
messagess.body
の7カラム。
・rooms.publicがTRUEである
・messages.room_id = rooms.idであること
・updated_atでDESCにソート
このような条件を満たすSQL文は以下のように書くことができました。
SELECT R.updated_at, R.id, R.public, M.room_id, M.sendfrom_list_id, M.sendto_list_id, M.body
FROM messages AS M, rooms AS R
WHERE R.public = "t" AND M.room_id = R.id
ORDER BY R.updated_at DESC;
しかし、ここに更に「rooms.idが重複しないもののみ抽出」という条件を加えたいのですが、どうしてもうまく行きません。
DISTINCTでは複数の中から一部のカラムだけをDISTINCTすることはできないようですし、GROUP BYも考えましたがどうやれば良いかわかりませんでした。
どなたか良い方法を教えて下さい。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
「rooms.idが重複しないもののみ抽出」
ということなので、重複しているrooms.idのレコードは1件も出したくないのなら、
SELECT max(R.updated_at), R.id, max(R.public), max(M.room_id),
max(M.sendfrom_list_id), max(M.sendto_list_id), max(M.body)
FROM messages AS M, rooms AS R
WHERE R.public = "t" AND M.room_id = R.id
GROUP BY R.id
HAVING count(*) < 2
ORDER BY R.updated_at DESC;
ででると思うけど
・・・blobとかの型(つまりmax()を使えない型)の項目があればだめですが。⇒別のやり方有り。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
入力値と外部キーをINSERTするには
-
PL/SQLの変数について
-
URL と行番号の指定
-
キー毎の、ある列のmaxのレコー...
-
SQLサーバから、項目の属性(型...
-
SQLで残高計算
-
武漢からのチャーター機
-
accessのチェックボックスをSQL...
-
MySQLのint型で001と表示する方...
-
複数テーブルからLIKE検索を行...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
”photo id” とは何ぞや?
-
SQLにて特定の文字を除いた検索...
-
所有格の意味
-
レコード削除・sqlインジェクシ...
-
このサイト(ttp://127.0.0.1/p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報