기간 중복 쿼리 질문드리옵나이다.... 0 3 1,277

by 이영우 [MySQL] 쿼리 기간 중복 [2016.06.15 18:13:17]


(MYSQL)

A 라는 테이블에서 a라는 유저가 같은 기간내에 1개이상 사용한 흔적을 뽑으려고 하는데요...

정확히는..예를들어

통화 기록에서 a 유저가 2016-06-14 09:20:00 ~ 2016-06-14 09:30:00 동안 통화를 10분동안 했는데..

a 유저가 이 10분 내에 또 통화를 사용한 흔적이 있다면, 

a 라는 결과값이 나오도록 하려 합니다...

 

시작 사용자 통화 시간
2016-06-14 09:00:02 2016-06-14 09:10:02 b 600
2016-06-14 09:00:00 2016-06-14 09:30:00 a 1800
2016-06-14 09:20:00 2016-06-14 09:40:00 a 1200
2016-06-14 09:00:04 2016-06-14 10:00:04 c 3600

위 테이블을 A라치면...

제가 원하는건...a 라는 유저가 9시에 통화를 시작해서 9시반에 끝나는데..

a라는 유저가 또 통화도중에 9시20분에 통화한 기록이있죠... 요고를 잡아내려구요..

결국 쿼리를 날리면 결과는 [a] 가 뽑혀야 하는데....

이게 가능한가요??

 

힌트라도 부탁ㄷ릐겠습니다!!

감사합니다. 건승하세요!!!

by jkson [2016.06.16 08:09:25]
WITH  T
AS (
SELECT TO_DATE('2016-06-14 9:00','yyyy-mm-dd hh24:mi') SDT,TO_DATE('2016-06-14 9:10','yyyy-mm-dd hh24:mi') EDT,'b' USERID,'600' TIMES FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-14 9:00','yyyy-mm-dd hh24:mi') ,TO_DATE('2016-06-14 9:30','yyyy-mm-dd hh24:mi') ,'a' ,'1800'  FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-14 9:20','yyyy-mm-dd hh24:mi') ,TO_DATE('2016-06-14 9:40','yyyy-mm-dd hh24:mi') ,'a' ,'1200'  FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-14 9:00','yyyy-mm-dd hh24:mi') ,TO_DATE('2016-06-14 10:00','yyyy-mm-dd hh24:mi') ,'c' ,'3600'  FROM DUAL 
)
, USERTIMES AS-- PK가 없어서 PK 만드려고..
(
SELECT sdt, edt, userid, times, rownum rn FROM T
)
SELECT DISTINCT USERID
  FROM 
    (
    SELECT SDT, EDT, USERID, TIMES
         , (SELECT COUNT(1)
              FROM USERTIMES
             WHERE USERID = A.USERID
               AND RN != A.RN
               AND (SDT < A.EDT
                AND EDT > A.SDT)) CNT
      FROM USERTIMES A
    )
 WHERE CNT > 0

 


by 이영우 [2016.06.17 12:24:58]

으어어어어감사합니다.

해보겠습니다~!


by 마농 [2016.06.17 14:06:21]
SELECT DISTINCT a.userid
  FROM usertimes a
     , usertimes b
 WHERE a.PK != b.PK
   AND a.userid = b.userid
   AND a.sdt < b.edt
   AND a.edt > b.sdt
;

 

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