비정형데이터 10분단위 데이터 조회 0 7 377

by 어려운문제 [SQL Query] [2019.10.30 09:49:30]


시작일자                     종료일자              

2019-10-30 01:01:00    2019-10-30 01:03:10 

2019-10-30 01:03:10    2019-10-30 01:13:40 

2019-10-30 01:13:40    2019-10-30 02:03:10

2019-10-30 02:03:10    2019-10-30 02:23:54

 

시작 ~ 종료 시간 데이터로 10분 간격으로 데이터를 조회하려고 합니다.

ex )

2019-10-30 01:01:00

2019-10-30 01:11:00

2019-10-30 01:21:00

2019-10-30 01:31:00

2019-10-30 01:41:00

....

 

어떻게 해야될지 감이 안잡히네요.

by 마농 [2019.10.30 10:05:44]

이전 종료시간과 이후 시작시간이 동일하네요.
시간의 연속으로 보고 결과물이 나오는 듯 한데요?
중간에 시간이 끊기는 경우는 없는지?


by 어려운문제 [2019.10.30 10:15:34]

네 맞습니다.

이전 종료시간이 다음 시작시간입니다.

시간은 끊기지않고 연속됩니다.


by 마농 [2019.10.30 10:20:46]

중간에 시간이 끊기는 경우는 없는지?


by 꼬랑지 [2019.10.30 10:53:36]
아래 쿼리의 RESULT 값을 원하시는 건가요?

WITH A AS(
    SELECT '2019-10-30 01:01:00' ST_TIME,    '2019-10-30 01:03:10' ED_TIME FROM DUAL UNION ALL 
    SELECT '2019-10-30 01:03:10' ST_TIME,    '2019-10-30 01:13:40' ED_TIME FROM DUAL UNION ALL 
    SELECT '2019-10-30 01:13:40' ST_TIME,    '2019-10-30 02:03:10' ED_TIME FROM DUAL UNION ALL
    SELECT '2019-10-30 02:03:10' ST_TIME,    '2019-10-30 02:23:54' ED_TIME FROM DUAL
)
SELECT
ED_TIME,ST_TIME,LEVEL*10 MINUTE
,ST_TIME+(LEVEL*10/24/60) RESULT
FROM( 
    SELECT
    MAX(TO_DATE(ED_TIME,'YYYY-MM-DD HH24:MI:SS')) ED_TIME
    ,MIN(TO_DATE(ST_TIME,'YYYY-MM-DD HH24:MI:SS')) ST_TIME
    ,FLOOR(((MAX(TO_DATE(ED_TIME,'YYYY-MM-DD HH24:MI:SS'))-MIN(TO_DATE(ST_TIME,'YYYY-MM-DD HH24:MI:SS')))*86400 /60)/10) CNT
FROM A
)A
CONNECT BY LEVEL<=CNT

 


by 어려운문제 [2019.10.30 11:07:37]

감사합니다. 

도움많이 됐습니다.


by 마농 [2019.10.30 11:02:16]
WITH t AS
(
SELECT TO_DATE(sdt, 'yyyy-mm-dd hh24:mi:ss') sdt
     , TO_DATE(edt, 'yyyy-mm-dd hh24:mi:ss') edt
  FROM (SELECT '2019-10-30 01:01:00' sdt, '2019-10-30 01:03:10' edt   FROM dual
        UNION ALL SELECT '2019-10-30 01:03:10', '2019-10-30 01:13:40' FROM dual
        UNION ALL SELECT '2019-10-30 01:13:40', '2019-10-30 02:03:10' FROM dual
        UNION ALL SELECT '2019-10-30 02:03:10', '2019-10-30 02:23:54' FROM dual
        )
)
SELECT s + (LEVEL - 1)/24/60*10 x
  FROM (SELECT MIN(sdt) s
             , MAX(edt) e
          FROM t
        )
 CONNECT BY LEVEL <= (e - s) * 24 * 60 / 10 + 1
;

 


by 어려운문제 [2019.10.30 11:07:43]

감사합니다. 

도움많이 됐습니다.

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