• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL文に関して教えてください。)

SQL文に関する質問

このQ&Aのポイント
  • SQLServer2005を利用し、マイクロソフトアクセスでadpを利用して構築を初めて行っています。ビューをネストすれば出来るのですが、1つのSQL内で完結させたいです。
  • フィールドがID1、ID2、ID3、date、txtと存在するテーブルの中で、txtフィールドがNullのレコードを対象にして、一番古い日付のレコードとnullのレコード数を取り出したいです。
  • この条件を満たすSQLの結果は以下のようになります:ID1が2、ID2が1、dateが20100901のレコードが2つ対象であるという結果です。

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

  • ベストアンサー
回答No.3

SELECT * FROM ( select [ID1],[ID2],[ID3],[date], (select COUNT(*) from @tb1 t2 where [txt] is null and t1.ID1=t2.ID1) as cnt, ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY [date]) as rowno from @tb1 t1 WHERE [txt] is null ) t3 WHERE t3.rowno=1

mikutaro
質問者

お礼

出来ました! ありがとうございました。 かなり勉強になりました!

その他の回答 (2)

  • bin_go
  • ベストアンサー率25% (2/8)
回答No.2

SELECT TOP 1 ID1, ID2, [date] , (SELECT COUNT(*) FROM table1 WHERE txt IS null GROUP BY txt) AS [レコード数] FROM table1 WHERE txt IS null ORDER BY [date] ASC こんなんでどうでしょう。

mikutaro
質問者

補足

bigcat1969さん、bin_goさんご回答ありがとうございました。 実践してみましたが、私の質問の仕方が悪く違った結果が出てしまったので、 もう一度御教授願います。 フィールドがID1、ID2、ID3、date、txtと存在するとします。 ID1, ID2, ID3, date, txt 1, 1, 2,20100801, test 1, 1, 3,20100901, Null 2, 3, 1,20100928, Null 2, 2, 2,20100905, Null 先ほどと同じくNullが対象データとし、ID1をキーとしdateが一番若いデータを取り出す ID1, ID2, ID3, date, レコード件数 1, 1, 3, 20100901, 1 2, 2, 2, 20100905, 2 上記のような結果を取得出来るSQLを書きたく思っています。 お忙しいところ申し訳ありませんが、よろしくお願いいたします。

回答No.1

select top 1 [ID1],[ID2],[date], (select COUNT(*) from @tb1 where [txt] is null) as cnt from @tb1 WHERE [txt] is null order by [date]

mikutaro
質問者

お礼

ありがとうございました。 申し訳ありません、質問の仕方が悪く、もう一度補足のように教えていただけないでしょうか?