• 締切済み

同じテーブル内の各CD、DATEごとの1番目レコードの抽出方法

SQLについての質問です。 同じテーブル内の各CD、DATEごとの 1番目レコードの抽出方法がわかりません。 (CD、DATEでソート) テーブル名:TMP CD DATE KIN 1 2007/09/01 5555 1 2007/09/01 2000 1 2007/09/01 3000 2 2007/09/05 2222 2 2007/09/05 3333 3 2007/09/10 9999 抽出結果(CD、DATEでソート) 1 2007/09/01 5555 2 2007/09/05 2222 3 2007/09/10 9999 どのようにすると抽出できるのでしょうか? よろしくお願いいたします。

みんなの回答

回答No.2

各cd、date列の値毎に、最少のid列の値を得るということなら、 次のSQLで結果を得られます。 select * from tmp where id in( select min(id) from tmp group by cd,date ) order by id

回答No.1

RDBMSは、ここのカテゴリ通り、SQL Serverですか? 他の掲示板でも同じ質問を見かけましたが、「抽出のルール」を明確にする必要があります。 「1番目のレコード」とは、「どういうレコードなのか」を明確にし、それを識別するための工夫をしなければなりません。 現在の表の構成列では、 select cd,date,max(kin) from tmp group by cd,date とするか、 select cd,date,min(kin) from tmp group by cd,date といった方法しかありません。 MS-ACCESSには、FIRSTやLASTといった「最初に格納した行」や「最後に格納した行」を保持する独自機能があるようですが、それは一般的なRDBMSの機能ではありません。 「各日付の一番早い時刻に格納した行を得たい」といった要件があるなら、「日付内通番」といった列を設けたり、行の格納が頻繁でないなら、日付と時刻で判断するといった方法を採るしかありません。

noname#76785
質問者

お礼

みなさんご指導ありがとうございました。 大変参考になりました。

noname#76785
質問者

補足

chukenkenkouさん ありがとうございます。 SQLSERVER2005です。 ID主キーを追加しました。 これだとできるのでしょうか? テーブル名:TMP ID CD DATE KIN 1001  1 2007/09/01 5555 1002  1 2007/09/01 2000 1003  1 2007/09/01 3000 1004  2 2007/09/05 2222 1005  2 2007/09/05 3333 1006  3 2007/09/10 9999 抽出結果 1 2007/09/01 5555 2 2007/09/05 2222 3 2007/09/10 9999 よろしくお願いします。 どうしても作らないといけないので...

関連するQ&A