SQL文についての質問

なすひこ
2013-06-04 15:14 1835 1
SQL文についての質問です。
以下のようなテーブルがあります。

テーブル1
ID, 区分, 日付,
------------------------
1001, 0, 2011/02/18
1001, 0, 2011/03/10
1001, 0, 2011/03/18
1002, 0, 2010/01/01
1002, 1, 2010/01/10
1002, 0, 2010/08/01
1003, 0, 2012/07/01
1003, 1, 2012/09/11
1003, 1, 2012/09/30

同じIDの中で区分0と1が混在しており、
かつそのIDの中で最新日付の行の区分が0の場合、
そのIDを表示します。

結果
-------------------
1002

上記の場合、ID「1002」が該当します。
ID「1001」は区分0しかないので該当しません。
ID「1003」は最新日付の区分が1なので該当しません。
尚、同IDで同日付は無いものとします。

このようなことを行うSQL文を作成したいのですが、苦戦しています。
どのようなSQLを書けば良いか、ご教授お願い致します。

コメント

2013年 06月 04日 (17:44)
こんにちは。
イノ(inno)です。
下記のSQLを確認してください。

-- 一時テーブル作成。
CREATE TABLE #Temp1
(
[ID] varchar(10)
, [区分] tinyint
, [日付] char(10)
)
GO

--データ登録
INSERT INTO #Temp1
SELECT '1001', 0, '2011/02/18' UNION ALL
SELECT '1001', 0, '2011/03/10' UNION ALL
SELECT '1001', 0, '2011/03/18' UNION ALL
SELECT '1002', 0, '2010/01/01' UNION ALL
SELECT '1002', 1, '2010/01/10' UNION ALL
SELECT '1002', 0, '2010/08/01' UNION ALL
SELECT '1003', 0, '2012/07/01' UNION ALL
SELECT '1003', 1, '2012/09/11' UNION ALL
SELECT '1003', 1, '2012/09/30'
GO

--結果
SELECT A.ID
FROM
(
SELECT ID, 区分, MAX([日付]) 日付
FROM #Temp1
WHERE 区分 = 0
GROUP BY ID,区分
) A
JOIN
(
SELECT ID, 区分, MAX([日付]) 日付
FROM #Temp1
WHERE 区分 = 1
GROUP BY ID,区分
) B
ON A.ID = B.ID AND A.日付 > B.日付