みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

これを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を教えてください。
お願いします。

投稿日時 - 2002-11-13 17:11:52

QNo.403784

SIM

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちわ。

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

投稿日時 - 2002-11-14 00:36:42

お礼

回答ありがとうございました。
わざわざ結果の確認までしていただいてほんとありがとうございました。
muyoshidさんの親切な回答のおかげで解決できました。

投稿日時 - 2002-11-14 10:55:19

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

select a.連番, a.コード, a.日付 from テーブル a where a.日付 = (
select max(日付) from テーブル where コード = a.コード
);

投稿日時 - 2002-11-13 17:38:31

お礼

回答ありがとうございました。
なるほどこの方法でいけますね。
ひとついい勉強になりました。

投稿日時 - 2002-11-14 10:47:05

ANo.2

副問い合わせ(サブクエリー)を使用します。

SELECT *
FROM テーブル名 テーブルの別名1
WHERE テーブルの別名1.連番 >= (
SELECT MAX(テーブルの別名2.連番)
FROM テーブル名 テーブルの別名2
WHERE テーブルの別名1.コード = テーブルの別名2.コード)

実際にそういったテーブルを作ってこのSQLを動かしたわけではありませんので、もしかしたら微妙に違っている部分もあるかもしれませんが、基本的にはこの考え方で大丈夫です。
また、RDBMSによりSQLの構文が多少異なるかもしれません(その辺は提示されてませんので汎用的な構文にしました)。

投稿日時 - 2002-11-13 17:35:23

お礼

回答ありがとうございました。
もうすこしSQLの勉強に励みます。

投稿日時 - 2002-11-14 10:45:20

ANo.1

データベースはなんですか?
SQLサーバーとかオラクルとか・・・。
それによってやり方、書き方など違ってきます。

補足お願いします。

投稿日時 - 2002-11-13 17:18:44

補足

ごめんなさい、肝心なことを忘れていました(^^;)
DBはOracle8iです。

投稿日時 - 2002-11-14 10:40:58

あなたにオススメの質問