對於任何間隔,你只是想是這樣的:
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
是的,這就是我所做的。但我想要一個能夠促進ITSELF「時間間隔」的查詢。結果是得到一張帶有兩列的表格,每次一列,第二列表示在這段時間內打開了多少個進程。 – menacheb 2010-04-18 10:14:55
你有時間間隔列表嗎?也許是UDF或CTE? – 2010-04-18 10:15:50
不,我想從(例如:2010/04/17 00:00:00)開始,然後從這個日期開始每秒檢查有多少過程開放,直到(例如:2010/04/18 00:00:00 )。 – menacheb 2010-04-18 10:18:47