簡體   English   中英

Oracle SQL查詢以獲取給定月份的非工作時間

[英]Oracle SQL Query to fetch non-working hours in a given month

需要您的幫助來構建Oracle SQL查詢,以捕獲給定月份的差旅列表中的非工作時間。

傳遞的值將是開始日期和結束日期

例如:

Feb has totally 696 hrs
     Start Date        End Date 
S2 - 02-Feb-16 14:00 - 06-Feb-16 20:00 - 102hrs
S1 - 01-Feb-16 04:00 - 02-Feb-16 10:00 - 30hrs

                    Total Worked hrs   - 132 hrs

The query result expected is 564 hrs

嘗試查詢:

SELECT (a)
FROM   (
  SELECT COUNT( (SELECT DISTINCT 'O'
                 FROM   TRIP s,
                        TRUCK p
                 WHERE  s.TRUCKID = p.TRUCKID
                 AND    p.NOTES2='ABC'
                 AND    p.TRUCKID='553'
                 AND    ( to_date(d,'DD-Mon-YYYY HH24')
                          NOT BETWEEN to_date(s.STIME,'DD-Mon-YYYY HH24')
                          AND to_date(s.ETIME,'DD-Mon-YYYY HH24')
                        )
               ) ) a
  FROM  (
    SELECT (TRUNC(to_date(sysdate,'DD-MON-YYYY'),'MM') + level - 1) d
    FROM   dual
    CONNECT BY level <= TO_CHAR(LAST_DAY(to_date(sysdate,'DD-MON-YYYY')),'DD')
  )
)
WITH Trip_Dates ( Start_Date, End_Date ) AS (
  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 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
)
SELECT ( ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 ) - TRUNC( SYSDATE, 'MM' )
         - SUM( End_Date - Start_Date ) ) * 24 AS Unworked_Hours
FROM   Trip_Dates;

輸出

UNWORKED_HOURS
--------------
           564 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM