2011-11-03 145 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