2011-12-19 90 views
2

有一個帶有datetime_in,datetime_out,card_id,group的表。知道我要在以下事項輸出:sql查詢分爲15分鐘

group ; date  ; quarterTime ; persons_in ; hours 
group1 ; 17-02-2010 ; 00:00 - 00:15 ; 0   ; 0 
group1 ; 17-02-2010 ; 00:15 - 00:30 ; 0   ; 0 
group1 ; 17-02-2010 ; 00:30 - 00:45 ; 0   ; 0 
~etc 
group1 ; 17-02-2010 ; 13:00 - 12:15 ; 334  ; 1483 

end then the same for all the groups starting with 00:00 until 23:45 

所以對於每一天的quearter我想有一個記錄,由小組,日期分組(天數)和quarterTime。然後在persons_in中,我希望在該季度內的記錄計數,以及以小時爲單位,直到當前季度結束時,總共有多少個人工作小時。所以每天只能得到更高和更高的人數,而只有人數在該季度內。所以我的問題是,我現在有一個非常骯髒的C#腳本來做這件事,因爲我想運行的最優化只有一個查詢。

我不介意使用存儲過程,但由於我不是很擅長sql,我更喜歡T-SQL。

任何人有想法如何做到這一點?例子?

+1

15分鐘分組部分是[SQL - 將開始/結束時間分成15分鐘記錄]的副本(http://stackoverflow.com/questions/2921760/sql-break-a-start-end-time -INTO 15分鐘,記錄)。運行總計部分是[在SqlServer中計算運行總計]的副本(http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver)。 – GSerg 2011-12-19 11:47:08

+0

謝謝,ik可以使用SqlServer中的Calculate a Running Total,但15分鐘內的開始/結束時間與我想要的不同。 – Eijso 2011-12-19 11:52:58

回答

2

你可以用這個邏輯來改變你的日期進行分組:

SELECT 
     CONVERT(bigint,Year(GETDATE())) * power(10,7) + 
     Month(GETDATE()) * POWER(10,5) + 
     Day(GETDATE()) * POWER(10,3) + 
     Datepart(hh,GETDATE()) * POWER(10,1) + 
     DATEPART(mi,GETDATE())/15 AS Agg_Date 

19/12/2011 13:31 => 20111219132

每次15分鐘有相同的密鑰。