[英]Removing overlap hours from count of non-working days
需要您的幫助才能完成此操作
2月總共696小時
Start Date End Date
S1 - 01-Feb-16 04:00 - 02-Feb-16 10:00 - 30hrs
S2 - 02-Feb-16 14:00 - 06-Feb-16 20:00 - 102hrs
S3 - 01-Feb-16 01:00 - 02-Feb-16 07:00 - 30hrs
Total Worked hrs - 162 hrs
由於S1和S3上有27個小時的重疊,因此總工作時間-135個小時預期的查詢結果為561個小時
我在這里遇到了代碼1的挑戰。准備好的代碼除了忽略重疊時間外還要做其他部分,需要您的幫助。 2.如何限制查詢以僅針對sysdate月進行驗證
Query:
SELECT ( ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 ) - TRUNC( SYSDATE, 'MM' )
- SUM( End_Date - Start_Date ) ) * 24 AS Unworked_Hours
FROM Trip_Dates;
Oracle安裝程序 :
CREATE TABLE Trip_Dates ( Start_Date, End_Date ) AS
SELECT TO_DATE( '2016-02-01 04:00:00', 'YYYY-MM-DD HH24:MI:SS' ), TO_DATE( '2016-02-02 10:00:00', 'YYYY-MM-DD HH24:MI:SS' ) FROM DUAL UNION ALL
SELECT TO_DATE( '2016-02-02 14:00:00', 'YYYY-MM-DD HH24:MI:SS' ), TO_DATE( '2016-02-06 20:00:00', 'YYYY-MM-DD HH24:MI:SS' ) FROM DUAL UNION ALL
SELECT TO_DATE( '2016-02-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS' ), TO_DATE( '2016-02-02 07:00:00', 'YYYY-MM-DD HH24:MI:SS' ) FROM DUAL;
查詢 :
WITH Dates ( dt, start_end ) AS (
SELECT GREATEST( start_date, TRUNC( SYSDATE, 'MM' ) ),
1
FROM trip_dates
WHERE start_date < ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 )
AND end_date > TRUNC( SYSDATE, 'MM' )
UNION ALL
SELECT LEAST( end_date, ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 ) ),
-1
FROM trip_dates
WHERE start_date < ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 )
AND end_date > TRUNC( SYSDATE, 'MM' )
ORDER BY 1, 2
)
,range_start_ends ( dt, start_end, range_start, range_end ) AS (
SELECT d.*,
CASE
WHEN start_end = 1
AND SUM( start_end ) OVER ( ORDER BY dt ) = 1
THEN dt
ELSE NULL
END,
CASE
WHEN start_end = -1
AND SUM( start_end ) OVER ( ORDER BY dt ) = 0
THEN dt
ELSE NULL
END
FROM Dates d
),
worked_days ( worked_days ) AS (
SELECT range_end - LAG( range_start ) IGNORE NULLS OVER ( ORDER BY dt )
FROM range_start_ends
)
SELECT ( ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 )
- TRUNC( SYSDATE, 'MM' ) -
SUM( worked_days )
) * 24 AS unworked_hours
FROM worked_days;
結果 :
UNWORKED_HOURS
--------------
561
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.