2010-04-18 141 views
1

我有一個名爲'ProcessData'的表和'Process_Name'(數據類型:nvarchar(50)),'Start_At'(DataType:DateTime)和'End_At'列的數據庫(SQL Server) (數據類型:日期時間)。我需要知道每個'時間間隔'(假設1秒)有多少個進程(Process_Name = PN)被打開(在'Start_at'列之後或等於'End_At'列)在這段時間內(它可以是具有相同數據的幾行)。SQL Server數據庫查詢幫助

有誰知道如何使這個查詢?

非常感謝,

回答

0

對於任何間隔,你只是想是這樣的:

SELECT COUNT(1) 
FROM ProcessData row 
WHERE (row.Start_At >= @start AND row.Start_At < @end) -- starts in interval 
OR (row.End_At >= @start AND row.End_At < @end) -- ends in interval 
OR (row.Start_At < @start AND row.End_at >= @end) -- spans interval 

(你不需要擔心「完全在這個區間」,因爲「在開始」和「ends in」covers that)

注意我假設@start是包容性的,而@end是獨佔的,這是一個非常常見的做法(避免重複計算邊界等) - 但感覺自由在不平等上添加/刪除一些=。例如,要包含兩端:

SELECT COUNT(1) 
FROM ProcessData row 
WHERE (row.Start_At >= @start AND row.Start_At <= @end) -- starts in interval 
OR (row.End_At >= @start AND row.End_At <= @end) -- ends in interval 
OR (row.Start_At < @start AND row.End_at > @end) -- spans interval 
+0

是的,這就是我所做的。但我想要一個能夠促進ITSELF「時間間隔」的查詢。結果是得到一張帶有兩列的表格,每次一列,第二列表示在這段時間內打開了多少個進程。 – menacheb 2010-04-18 10:14:55

+0

你有時間間隔列表嗎?也許是UDF或CTE? – 2010-04-18 10:15:50

+0

不,我想從(例如:2010/04/17 00:00:00)開始,然後從這個日期開始每秒檢查有多少過程開放,直到(例如:2010/04/18 00:00:00 )。 – menacheb 2010-04-18 10:18:47