(答) select A.ID, A.DATE, A.DATA from TableName A inner join (select ID, max(DATE) as MAX_DATE from TableName group by ID ) B on A.ID = B.ID and A.DATE = B.MAX_DATE ; 0005NAME IS NULL2016/07/10(日) 22:31:14.13ID:??? よくある質問2
(問) key data ---------------- 1 a 1 a 1 b 1 b 1 a 2 b 2 a 2 a
(答) SELECT key, SUM(CASE data WHEN 'a' THEN 1 END) AS a, SUM(CASE data WHEN 'b' THEN 1 END) AS b FROM table GROUP BY key ORDER BY key ; 0006NAME IS NULL2016/07/10(日) 22:34:14.23ID:??? よくある質問3
(問) ID HOGE 01 A 01 B 01 C 02 A 03 B
HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか
(答1) SELECT id FROM TableName WHERE hoge in ('A','B','C') GROUP BY id HAVING count(DISTINCT hoge) = 3 ;
(答2) select * from TableName T1 where not exists (select * from (values 'A', 'B', 'C') T2 (HOGE) where not exists (select * from TableName T3 where T1.ID = T3.ID and T2.HOGE = T3.HOGE ) ) ; ※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意