重複データからMAX値を条件にレコードを取得する
以下のようなデータからcode_1毎にyear_monthが最大(最新)のレコードを取得する。
code_1 | code_2 | year_month | value |
---|---|---|---|
A | 10001 | 201511 | 100 |
A | 10002 | 201512 | 200 |
B | 20001 | 201509 | 300 |
B | 20002 | 201510 | 400 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | SELECT t2.code_1 , t2.code_2 , t2.yaer_month , t2.value FROM target_table t2 INNER JOIN ( SELECT code_1 , MAX(year_month) AS year_month FROM target_table GROUP BY code_1 ) t1 ON t1.code_1 = t2.code_1 AND t1.year_month = t2.year_month ORDER BY t2.code_1 , t2.code_2 , t2.yaer_month |
以下のようにcode_1、yaer_monthのみでは、重複レコードを排除できない状態でcode_2が最大のレコードを取得する。
code_1 | code_2 | year_month | value |
---|---|---|---|
A | 10001 | 201511 | 100 |
A | 10002 | 201512 | 200 |
A | 10003 | 201512 | 300 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | SELECT t4.code_1 , t4.code_2 , t4.yaer_month , t4.value FROM target_table t4 INNER JOIN ( SELECT t2.code_1 , t2.yaer_month , MAX(t2.code_2) AS code_2 FROM target_table t2 INNER JOIN ( SELECT code_1 , MAX(year_month) AS year_month FROM target_table GROUP BY code_1 ) t1 ON t1.code_1 = t2.code_1 AND t1.year_month = t2.year_month GROUP BY t2.code_1 , t2.yaer_month ) t3 ON t3.code_1 = t4.code_1 AND t3.yaer_month = t4.yaer_month AND t3.code_2 = t4. code_2 ORDER BY t4.code_1 , t4.code_2 , t4.yaer_month |