2011-11-03 219 views
0

我需要將我的表分組爲15分鐘間隔。我可以做到這一點:按時間間隔分組

select dateadd(minute, datediff(minute, 0, ts)/15 * 15, 0), sum (goodpieces) 
from StationCount 
Group by dateadd(minute, datediff(minute, 0, ts)/15 * 15, 0) 

但圖表我也需要插入不具有任何數據,目前沒有出現在我的select語句的間隔中顯示返回的數據。我如何插入這些?

回答

1

使用每個可能的時間戳以15分鐘的增量創建一個表,並從它上面執行一個LEFT JOIN連接到上面的查詢。

SELECT * FROM timestamps LEFT JOIN (SELECT dateadd......) ON timestamps.timestamp = StationCount.ts 

如果你知道你的圖表總佔地面積24小時內,你只需要創建一個表與數字0-95,然後爲每個條目添加到您的圖表的起始時間。

SELECT * 
    FROM (SELECT dateadd(minute, <starttime>, number*15) timestamp FROM numbers) timestamps LEFT JOIN 
     (SELECT dateadd......) ON timestamps.timestamp = StationCount.ts 
+0

你能告訴我爲什麼數字表應該有95個條目24小時? – TheJoeIaut

+1

96項,而不是95(0-95),因爲24 * 60/15 = 96。 – Ariel

+0

好吧,你在選擇的第一部分中是不是缺少數字* 15? – TheJoeIaut

1

像這樣的東西可能會幫助你。

declare @startDate datetime 
     ,@endDate datetime 

set @startDate = '2011-10-25' 
set @endDate = '2011-10-26' 

;with fifteenMinutes 
as 
(
    select dateadd(minute, datediff(minute, 0, @startDate)/15 * 15, 0) as q 
    UNION ALL 
    select dateadd(minute, 15, q) 
    from fifteenMinutes 
    where q < @endDate 
) 

select * from fifteenMinutes