- 締切済み
同じテーブル内の各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 どのようにすると抽出できるのでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
各cd、date列の値毎に、最少のid列の値を得るということなら、 次のSQLで結果を得られます。 select * from tmp where id in( select min(id) from tmp group by cd,date ) order by id
- chukenkenkou
- ベストアンサー率43% (833/1926)
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の機能ではありません。 「各日付の一番早い時刻に格納した行を得たい」といった要件があるなら、「日付内通番」といった列を設けたり、行の格納が頻繁でないなら、日付と時刻で判断するといった方法を採るしかありません。
お礼
みなさんご指導ありがとうございました。 大変参考になりました。
補足
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 よろしくお願いします。 どうしても作らないといけないので...