아래와 같은 데이터가 있다고 가정 했을 때!
두 번째 필드가 "1" 일 경우와 "0" 일 경우에 첫 번째 필드에 대해서 중복제거를 하고싶습니다.
"1" 일 경우에는 시간정렬이 asc 고 "0" 일 경우엔 시간정렬이 desc 로요.
위에 쿼리를 적용한다면 아래 데이터에선 빨간 색 부분만 출력이 돼야하는데 어렵습니다ㅜㅜ
20141223102440506_0.bmp 0 정문 NULL 2015-09-09 16:01:46.267
20141223102440506_0.bmp 1 정문 NULL 2015-09-09 16:02:30.850
20141223102440506_0.bmp 1 정문 NULL 2015-09-09 16:03:48.617
1 2 3 4 5 6 7 8 9 10 11 | WITH T(a, b, c, d, e) AS ( SELECT '20141223102440506_0.bmp' , 0, '정문' , NULL , '2015-09-09 16:01:46.267' FROM DUAL UNION ALL SELECT '20141223102440506_0.bmp' , 1, '정문' , NULL , '2015-09-09 16:02:30.850' FROM DUAL UNION ALL SELECT '20141223102440506_0.bmp' , 1, '정문' , NULL , '2015-09-09 16:03:48.617' FROM DUAL ) SELECT a, b, c, d, MIN (e) FROM T GROUP BY a, b, c, d |
저는 이렇게 해봤습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | WITH T AS ( SELECT '20141223102440506_0.bmp' COL1, 0 COL2, '정문' COL3, NULL COL4, TO_TIMESTAMP( '2015-09-09 16:01:46.267' , 'YYYY-MM-DD HH24:MI:SS.FF' ) COL5 FROM DUAL UNION ALL SELECT '20141223102440506_0.bmp' COL1, 0 COL2, '정문' COL3, NULL COL4, TO_TIMESTAMP( '2015-09-09 16:04:00.000' , 'YYYY-MM-DD HH24:MI:SS.FF' ) COL5 FROM DUAL UNION ALL SELECT '20141223102440506_0.bmp' COL1, 1 COL2, '정문' COL3, NULL COL4, TO_TIMESTAMP( '2015-09-09 16:02:30.850' , 'YYYY-MM-DD HH24:MI:SS.FF' ) COL5 FROM DUAL UNION ALL SELECT '20141223102440506_0.bmp' COL1, 1 COL2, '정문' COL3, NULL COL4, TO_TIMESTAMP( '2015-09-09 16:03:48.617' , 'YYYY-MM-DD HH24:MI:SS.FF' ) COL5 FROM DUAL ) SELECT * FROM ( SELECT COL1, COL2, COL3, COL4, COL5 , ROW_NUMBER() OVER(PARTITION BY COL1, COL2 ORDER BY COL5 ASC ) RN1 , ROW_NUMBER() OVER(PARTITION BY COL1, COL2 ORDER BY COL5 DESC ) RN2 FROM T) WHERE (COL2 = 0 AND RN2 = 1) OR (COL2 = 1 AND RN1 = 1); |