2017-01-22 81 views
1

花了我有表列:名字,日期和進入退出的辦公室,日期和時間的時間查詢計算時間在辦公室

enter image description here

我寫的查詢,返回數量小時是僱主花了每週的辦公室,例如

enter image description here

我不知道該怎麼做,請幫助。

+1

查找了'DATEPART'&'DATEDIFF' –

+0

要獲取週數,請使用此SELECT DATEPART(周,@Dt) 然後使用週數創建查詢並進行聚合。 – Habeeb

+0

對於幾個小時,你可以做sum(datediff等)在完成之前,確保你知道如何處理部分時間。對於開始和結束部分的一週,日曆表就派上用場了。這使您能夠指定星期是星期日還是星期一開始,還是指定星期,或者您的業務指定的任何星期。 –

回答

0

測試數據

Declare @T TABLE (EmpID INT , Enter DATETIME , [Exit] DATETIME) 

INSERT INTO @T VALUES 
(1 , '2017-01-22 09:26:00.000' , '2017-01-22 15:25:00.000') 
,(1 , '2017-01-21 10:15:00.000' , '2017-01-21 12:00:00.000') 
,(1 , '2017-01-20 09:05:00.000' , '2017-01-20 13:05:00.000') 
,(1 , '2017-01-21 10:15:00.000' , '2017-01-21 12:00:00.000') 
,(2 , '2017-01-22 09:26:00.000' , '2017-01-22 15:26:00.000') 
,(2 , '2017-01-21 10:15:00.000' , '2017-01-21 12:30:00.000') 
,(2 , '2017-01-20 09:05:00.000' , '2017-01-20 13:05:00.000') 

查詢

Select EmpID 
    , CONVERT(VARCHAR(10) ,DATEADD(DAY, - (DATEPART(WEEKDAY, Enter)-1), Enter) , 104) [WeekStart] 
    , CONVERT(VARCHAR(10) ,DATEADD(DAY, 7- (DATEPART(WEEKDAY, Enter)), Enter) , 104) [WeekEnd] 
    , CAST(SUM(DATEDIFF(minute,Enter, [Exit]))/60.00 AS DECIMAL(10,2)) [Hours Worked] 

FROM @T 
GROUP BY EmpID 
    , CONVERT(VARCHAR(10) ,DATEADD(DAY, - (DATEPART(WEEKDAY, Enter)-1), Enter) , 104) 
    , CONVERT(VARCHAR(10) ,DATEADD(DAY, 7- (DATEPART(WEEKDAY, Enter)), Enter) , 104) 

結果集

╔═══════╦════════════╦════════════╦══════════════╗ 
║ EmpID ║ WeekStart ║ WeekEnd ║ Hours Worked ║ 
╠═══════╬════════════╬════════════╬══════════════╣ 
║  1 ║ 15.01.2017 ║ 21.01.2017 ║   7.50 ║ 
║  1 ║ 22.01.2017 ║ 28.01.2017 ║   5.98 ║ 
║  2 ║ 15.01.2017 ║ 21.01.2017 ║   6.25 ║ 
║  2 ║ 22.01.2017 ║ 28.01.2017 ║   6.00 ║ 
╚═══════╩════════════╩════════════╩══════════════╝ 
+0

您救了我,非常感謝。 – rebrikk