두날짜 사이에 휴일,주말을 제외한 시간 차이를 알고싶습니다 0 2 2,199

by 숲 [SQL Query] [2024.10.18 23:09:03]


두날짜 사이에 휴일,주말을 제외한 시간 차이를 알고싶습니다

예를들면 20241018 14:30~ 202041021 15:30 

두날짜 사이에 차이를  분으로만 나타내고 싶은데 어떻게 쿼리를 짜야되나여?

3시간째 짜보고 있는데 쉽지 않네여

by 뉴비디비 [2024.10.21 00:21:25]

* 주말 아닌 공휴일은 운영하시는 내용으로 추가 필요 

SELECT
	sdttm "시작일시", edttm "종료일시"
	, sum(CASE WHEN TRUNC(sdttm) = gen_dt THEN (1 - (sdttm - gen_dt))*(24*60) 
		       WHEN TRUNC(edttm) = gen_dt THEN (edttm - gen_dt)*(24*60) 
		       ELSE (24*60) END ) AS "차이(분)"
FROM 
(   
	SELECT 
		TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI') AS sdttm
		,TO_DATE('20241021 15:30', 'YYYYMMDD HH24:MI') AS edttm
	FROM dual
) tbl,
(
	SELECT 
		TRUNC(TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI')) + LEVEL -1 AS gen_dt
		, TO_CHAR(TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI') + LEVEL -1, 'D') AS yoil  
	FROM DUAL
	CONNECT BY LEVEL <= TO_DATE('20241021 15:30', 'YYYYMMDD HH24:MI') - TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI') +1 
) genTbl
WHERE genTbl.yoil NOT IN ('1','7')


by 마농 [2024.10.21 08:22:09]

달력 테이블을 하나 민들어 두고 조인하여 사용하세요.
일수가 아닌 시간 정보라면? 휴식시간은 따로 없는지?

WITH t_calendar AS
(
-- 달력 테이블 미리 만들어 두고 사용하세요.
SELECT dt
     , CASE WHEN TO_CHAR(dt, 'yyyymmdd') IN ('20241003', '20241009') THEN 0
            WHEN TO_CHAR(dt, 'd') IN ('1', '7')  THEN 0
            ELSE 1 END cnt
  FROM (SELECT TO_DATE('202410', 'yyyymm') + LEVEL - 1 dt
          FROM dual
         CONNECT BY LEVEL <= 31
        )
)
SELECT SUM(ROUND((LEAST(dt + 1, edt) - GREATEST(dt, sdt)) * cnt * 24 * 60)) minute_
  FROM (SELECT TO_DATE('20241018 14:30', 'yyyymmdd hh24:mi') sdt
             , TO_DATE('20241021 15:30', 'yyyymmdd hh24:mi') edt
          FROM dual
        ) a
     , t_calendar b
 WHERE dt BETWEEN TRUNC(sdt) AND edt
;

 

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