按时间间隔分组
问题描述:
我需要将我的表分组为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语句的间隔中显示返回的数据。我如何插入这些?
答
使用每个可能的时间戳以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
答
像这样的东西可能会帮助你。
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
你能告诉我为什么数字表应该有95个条目24小时? – TheJoeIaut
96项,而不是95(0-95),因为24 * 60/15 = 96。 – Ariel
好吧,你在选择的第一部分中是不是缺少数字* 15? – TheJoeIaut