안녕하세요...적용기간 이력에 벗어난 자료를 찾으려고 하는데요..
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 | WITH MST AS ( /* 적용기간 이력 */ SELECT 'AAA' CD, '20220101' STR_DY, '20220131' END_DY FROM DUAL UNION ALL SELECT 'AAA' CD, '20220301' STR_DY, '20220331' END_DY FROM DUAL UNION ALL SELECT 'AAA' CD, '20220401' STR_DY, '20220430' END_DY FROM DUAL ) , LST AS ( SELECT 'AAA' CD, '20211220' DY FROM DUAL UNION ALL /* 적용기간에 벗어남 */ SELECT 'AAA' CD, '20220118' DY FROM DUAL UNION ALL SELECT 'AAA' CD, '20220220' DY FROM DUAL UNION ALL /* 적용기간에 벗어남 */ SELECT 'AAA' CD, '20220415' DY FROM DUAL UNION ALL SELECT 'AAA' CD, '20220501' DY FROM DUAL /* 적용기간에 벗어남 */ ) SELECT * FROM ( SELECT MAX (MST.MST_CNT) MST_CNT , LST.CD --, MST.STR_DY --, MST.END_DY , LST.DY , SUM ( CASE WHEN LST.DY BETWEEN MST.STR_DY AND MST.END_DY THEN 0 ELSE 1 END ) VALID_CNT FROM ( SELECT COUNT (CD) OVER(PARTITION BY CD) MST_CNT, CD, STR_DY, END_DY FROM MST) MST , LST WHERE LST.CD = MST.CD GROUP BY LST.CD, LST.DY ) WHERE MST_CNT = VALID_CNT; |
이렇게 해봤는데 좀더 좋은 방법 있을까요??