날짜, 시간 연속성 체크 질문 2 2 4,335

by ziiiii [SQL Query] 질문 쿼리작성 연속 날짜연속 시간연속 oracle date lag lead [2022.03.24 15:37:51]


안녕하세요. 쿼리를 작성하는데 어려움이 있어 질문드립니다.

NO 시작일자 시작시간 종료일자 종료시간
1 20220324 1800 20220324 1900
2 20220324 2300 20220324 2330
3 20220324 2330 20220325 0000

테이블에 위처럼 데이터가 있을 때, 들어오는 데이터 기준으로 연속성을 체크하여 시작시간~종료시간의 총 시간을 구하고 싶습니다.

 

1. 20220324, 1930, 20220324, 2300 의 데이터가 들어오면

   no1과는 19:00 19:30 30분의 간격이 있으므로 비연속, no2, no3과는 연속으로 19:30~00:00의 총 시간인 4시간 30분 계산

 

2. 20220324, 1900, 20220324, 2300 의 데이터가 들어오면

   no1, no2, no3 모두와 연속으로 18:00~00:00의 총 시간인 6시간 계산 

 

3. 20220324, 1930, 20220324, 2200 의 데이터가 들어오면

   no1, no2, no3 모두와 비연속으로 19:30~22:00의 총 시간인 2시간 30분 계산

 

도움부탁드립니다.

by 마농 [2022.03.25 00:49:13]
WITH t0 AS
(
SELECT 1 no, '20220324' sdt, '1800' stm, '20220324' edt, '1900' etm FROM dual
UNION ALL SELECT 2, '20220324', '2300', '20220324', '2330' FROM dual
UNION ALL SELECT 3, '20220324', '2330', '20220325', '0000' FROM dual
)
, t1(no, sdt, stm, edt, etm) AS
(
--SELECT 0 no, '20220324' sdt, '1930' stm, '20220324' edt, '2300' etm FROM dual
--SELECT 0 no, '20220324' sdt, '1900' stm, '20220324' edt, '2300' etm FROM dual
SELECT 0 no, '20220324' sdt, '1930' stm, '20220324' edt, '2200' etm FROM dual
 UNION ALL
SELECT b.no, b.sdt, b.stm, b.edt, b.etm
  FROM t1 a
     , t0 b
 WHERE (a.sdt = b.edt AND a.stm = b.etm)
    OR (b.sdt = a.edt AND b.stm = a.etm)
)
CYCLE no SET is_cycle TO 1 DEFAULT 0
SELECT TO_CHAR(TO_DATE(ROUND(
       ( TO_DATE(MAX(edt || etm), 'yyyymmddhh24mi')
       - TO_DATE(MIN(sdt || stm), 'yyyymmddhh24mi')
       ) * 24 * 60 * 60), 'sssss'), 'hh24:mi') tm
  FROM t1
 WHERE is_cycle = 0
;

 


by ziiiii [2022.03.29 16:41:00]

감사합니다!!

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