아래와 같은 데이터가 있다고 가정 했을 때!
두 번째 필드가 "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
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
저는 이렇게 해봤습니다.
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);