- ベストアンサー
これをSQLでやることは可能ですか?
すいません。どうしても閃かないので教えてください。 まず、テーブルは 連番 PK コード 日付 となっています。 その中のデータは 連番 コード 日付 -----+--------+--------- 1 | 001 | 2002/01 2 | 001 | 2002/02 3 | 002 | 2002/03 4 | 002 | 2002/04 5 | 003 | 2002/05 -----+--------+--------- となっています。 このデータの中から 「コード毎に日付が一番新しい連番」を取得したいのですが可能でしょうか? 結果は 連番 コード 日付 -----+--------+--------- 2 | 001 | 2002/02 4 | 002 | 2002/04 5 | 003 | 2002/05 -----+--------+--------- となって欲しいのですが・・・ どなたかこれを実現するSQLを教えてください。 お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ。 Oracle で確認してみました。 SQL> desc test 名前 NULL? 型 ------------ -------- ----------- 連番 NOT NULL NUMBER(4) コード VARCHAR2(4) 日付 VARCHAR2(8) SQL> select * from test; 連番 コー 日付 ---------- ---- -------- 1 001 2002/01 2 001 2002/02 3 002 2002/03 4 002 2002/04 5 003 2002/05 SQL> Select 連番, コード, 日付 from test where (コード, 日付) IN (Select コード, MAX(日付) from test group by コード); 連番 コー 日付 ---------- ---- -------- 2 001 2002/02 4 002 2002/04 5 003 2002/05
その他の回答 (3)
- timber
- ベストアンサー率29% (218/739)
select a.連番, a.コード, a.日付 from テーブル a where a.日付 = ( select max(日付) from テーブル where コード = a.コード );
お礼
回答ありがとうございました。 なるほどこの方法でいけますね。 ひとついい勉強になりました。
- mfuku
- ベストアンサー率50% (173/345)
副問い合わせ(サブクエリー)を使用します。 SELECT * FROM テーブル名 テーブルの別名1 WHERE テーブルの別名1.連番 >= ( SELECT MAX(テーブルの別名2.連番) FROM テーブル名 テーブルの別名2 WHERE テーブルの別名1.コード = テーブルの別名2.コード) 実際にそういったテーブルを作ってこのSQLを動かしたわけではありませんので、もしかしたら微妙に違っている部分もあるかもしれませんが、基本的にはこの考え方で大丈夫です。 また、RDBMSによりSQLの構文が多少異なるかもしれません(その辺は提示されてませんので汎用的な構文にしました)。
お礼
回答ありがとうございました。 もうすこしSQLの勉強に励みます。
データベースはなんですか? SQLサーバーとかオラクルとか・・・。 それによってやり方、書き方など違ってきます。 補足お願いします。
補足
ごめんなさい、肝心なことを忘れていました(^^;) DBはOracle8iです。
お礼
回答ありがとうございました。 わざわざ結果の確認までしていただいてほんとありがとうございました。 muyoshidさんの親切な回答のおかげで解決できました。