在Sql server中计算事件?

Roy*_*mir 5 t-sql sql-server sql-server-2008

我有一张包含购买时间信息的表格.(用户购买一些东西......)

我需要创建一个间隔为5分钟的时间线,我需要在这5分钟的窗口中计算 - 进行了多少购买(计数) - (不需要用户分组))

起始点= @startCheckingTime 其值为08:00:00

终点=一天结束.(如果:xx:59:59或者比第二天更小,则无关紧要00:00:00)

表是:

DECLARE @startCheckingTime DATETIME 
SET @startCheckingTime='2010-01-01 08:00:00'
declare @t table 
(
    d   DATETIME 
)

INSERT INTO  @t
SELECT   '2010-01-01 08:02:00'
UNION ALL
SELECT   '2010-01-01 08:04:00'
UNION ALL
SELECT   '2010-01-01 08:05:00'
UNION ALL
SELECT   '2010-01-01 08:06:00'
UNION ALL
SELECT   '2010-01-01 08:07:00'
UNION ALL
SELECT   '2010-01-01 08:12:00'
Run Code Online (Sandbox Code Playgroud)

所以结果应该是:

08:05:00    |   3  //in the last 5 min we had 3 purchases
08:10:00    |   2
08:15:00    |   1
Run Code Online (Sandbox Code Playgroud)

题 :

是否必须创建一个临时表(或表variacble),它具有从08:00:00到结束的所有时间间隔才能执行此操作?(通过加入)

或者,这可以在没有任何包含所有可能值表的帮助下进行

谢谢.

ps如果某个值在xx:05:00处激动,则无论它属于哪个窗口,只要它对所有项目都相同

Mik*_*son 3

尝试这个:

select dateadd(minute, m * 5, 0) as d,
       count(*) as c
from (
      select datediff(minute, 0, d) / 5 as m
      from @t
      where d >= @startCheckingTime and
            d < dateadd(day, 1, cast(@startCheckingTime as date))
      ) T
group by m
order by m
Run Code Online (Sandbox Code Playgroud)