- ベストアンサー
重複したデータの中で、一番新しい日付の値を表示したい
MySQLの構文についてお尋ねします。 使用しているMySQLのバージョンは5.0.45です。 +-----------------------------------------+ | id | logno | fig | date | +-------+----------+-------+--------------+ | 1 | 11 | a | 2008-06-01 | | 1 | 11 | b | 2008-06-05 | | 1 | 11 | c | 2008-06-10 | | 1 | 12 | a | 2008-06-01 | | 1 | 13 | b | 2008-06-01 | | 1 | 13 | a | 2008-06-10 | | 2 | 11 | a | 2008-06-01 | +-------+----------+-------+--------------+ 上記のtestテーブルの、 ・id=1のデータ ・lognoごとに、dateが一番新しいもの を抽出したいです。 SELECT logno,fig,MAX(date) FROM test WHERE id=1 GROUP BY logno という構文を考えたのですが、結果を確認するとfigの値だけが一番dateが古いものになってしまいます。 +-----------------------------------------+ | id | logno | fig | date | +-------+----------+-------+--------------+ | 1 | 11 | a | 2008-06-10 | | 1 | 12 | a | 2008-06-01 | | 1 | 13 | b | 2008-06-10 | +-------+----------+-------+--------------+ どのようにしたら +-----------------------------------------+ | id | logno | fig | date | +-------+----------+-------+--------------+ | 1 | 11 | c | 2008-06-10 | | 1 | 12 | a | 2008-06-01 | | 1 | 13 | a | 2008-06-10 | +-------+----------+-------+--------------+ という結果が得られるようになるでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで SELECT id,logno,fig,date FROM test where (id,logno,date) in (SELECT id,logno,MAX(date) FROM test WHERE id=1 GROUP BY logno)
その他の回答 (3)
- nora1962
- ベストアンサー率60% (431/717)
こんなやり方も select * from test t1 where t1.id=1 and not exists ( select 1 from test t2 where t1.logno=t2.logno and t1.date< t2.date );
お礼
回答ありがとうございます! こちらの方法でも希望通りの結果を得ることができました。 自分の見たマニュアルなどでは全く見かけない構文なので、とても勉強になります。 ありがとうございました!
- nda23
- ベストアンサー率54% (777/1415)
同じような質問です。 http://okwave.jp/qa4089307.html JOIN句とか微調整してください。 但し、MySQL 4.1以上でないとサブクエリは使えません。 もし、4.0以下の場合は、サブクエリの抽出結果を一時テーブルに 出力し、この一時テーブルと結合させます。 CREATE TEMPORARY TABLE XXX SELECT logno,MAX(date) AS MaxDate FROM test GROUP BY logno; SELECT A.* FROM test A,XXX B WHERE A.logno=B.logno AND A.date=B.MaxDate; DROP TABLE XXX;
お礼
回答ありがとうございます! こちらのやり方ですと、残念ながらid=1のデータだけを抽出できませんでした…。 また、質問文に明記しておらず申し訳ありませんでしたが、「idごとにlognoの一番新しいもの」が必要なのです。
- himajin100000
- ベストアンサー率54% (1660/3060)
お礼
回答ありがとうございます!
お礼
回答ありがとうございます! この方法で希望通りの結果を得ることができました。 ずっと悩んでいたので、とても助かりました。 また、サブクエリのやり方など、いまひとつ理解できず使えなかったのですが、こちらの構文を見てこういう風に使えばいいのか…と理解できました。 本当に、ありがとうございました!