중복 날짜 제거 방법 알려주세요 1 4 5,773

by 오병규 [SQL Query] 중복 날짜 sql [2011.08.11 11:45:02]


sql로 처리하는 방법을 알고 싶습니다.
 
ex)  usr sdt    edt
  a    2011-09-01    2011-09-10
  a    2011-09-11    2011-09-28
  a    2011-09-26    2011-10-02
  a    2011-10-04    2011-10-12
  a    2011-10-13    2011-10-17
  b    2011-09-10    2011-09-12
동일 usr에 일자가 1일 차이가 나지 않는 일자의 from ~ to 일자를 구하는 내용입니다.
위의 내용은 아래의 내용처럼 나와야 합니다.


usr sdt    edt
  a    2011-09-01    2011-10-02
  a    2011-10-04    2011-10-17
  b    2011-09-10    2011-09-12

고수님들의 답변을 부탁드립니다.
oracle11g 사용하고 있습니다.
by 부쉬맨 [2011.08.11 12:34:58]
단순하게는 그냥
usr ,sdt 부분은 group by
하여서 sdt 를 min으로 받아오시면됩니다.

by 마농 [2011.08.11 13:25:44]
2번째 3번째 행의 자료를 보면 날짜가 겹쳐지게 되는데요?
이렇게 실제로 날짜가 겹쳐지는 자료가 존재하는지요?
아니면 예시를 잘못 적으신건지요?

by 마농 [2011.08.11 13:49:45]
WITH t AS
(
SELECT 'a' usr, '2011-09-01' sdt, '2011-09-10' edt FROM dual
UNION ALL SELECT 'a', '2011-09-11', '2011-09-28' FROM dual
UNION ALL SELECT 'a', '2011-09-26', '2011-10-02' FROM dual
UNION ALL SELECT 'a', '2011-10-04', '2011-10-12' FROM dual
UNION ALL SELECT 'a', '2011-10-13', '2011-10-17' FROM dual
UNION ALL SELECT 'b', '2011-09-10', '2011-09-12' FROM dual
)
SELECT usr
, MIN(sdt) sdt
, MAX(edt) edt
FROM
(
SELECT usr, sdt, edt
, SUM(flag) OVER(PARTITION BY usr ORDER BY sdt, edt) grp
FROM
(
SELECT usr, sdt, edt
, CASE WHEN TO_CHAR(TO_DATE(sdt, 'yyyy-mm-dd') - 1, 'yyyy-mm-dd')
<= MAX(edt) OVER(PARTITION BY usr ORDER BY sdt, edt ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
THEN 0 ELSE 1 END flag
FROM t
)
)
GROUP BY usr, grp
ORDER BY usr, grp
;

by obg [2011.08.11 15:40:00]
감사합니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입