- ベストアンサー
SQL文に関する質問
- SQLServer2005を利用し、マイクロソフトアクセスでadpを利用して構築を初めて行っています。ビューをネストすれば出来るのですが、1つのSQL内で完結させたいです。
- フィールドがID1、ID2、ID3、date、txtと存在するテーブルの中で、txtフィールドがNullのレコードを対象にして、一番古い日付のレコードとnullのレコード数を取り出したいです。
- この条件を満たすSQLの結果は以下のようになります:ID1が2、ID2が1、dateが20100901のレコードが2つ対象であるという結果です。
- みんなの回答 (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
その他の回答 (2)
- bin_go
- ベストアンサー率25% (2/8)
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 こんなんでどうでしょう。
補足
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を書きたく思っています。 お忙しいところ申し訳ありませんが、よろしくお願いいたします。
- bigcat1969
- ベストアンサー率70% (7/10)
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]
お礼
ありがとうございました。 申し訳ありません、質問の仕方が悪く、もう一度補足のように教えていただけないでしょうか?
お礼
出来ました! ありがとうございました。 かなり勉強になりました!