伯爵在SQL Server中的事件?(Count events in Sql server?)

2019-09-20 00:21发布

我有一个在表中的购买时间信息 。 (用户买了一些东西......)

我需要创建具有5分钟间隔的时间线,并且我需要在这5分钟窗口计数-多少购买(计数)作了- ( 不需要组由使用者 ))

开始点= @startCheckingTime其值为八点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'

所以结果应该是:

08:05:00    |   3  //in the last 5 min we had 3 purchases
08:10:00    |   2
08:15:00    |   1

题 :

必须创建一个临时表(或表variacble)已经从08:00:00所有的时间间隔,以便做到这一点结束一天的? (通过连接)

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

谢谢。

PS如果值是excatly在XX:05:00,它不事关它属于哪个窗口,只要其对所有项目相同

Answer 1:

尝试这个:

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


Answer 2:

这不感觉最自然的,但你可以通过不上不下与分工分钟避开使用公用表的时间间隔。

SELECT 
    DATEPART(hour, d) as Hour, 
    (DATEPART(minute, d) / 5) * 5 as Minute, 
    COUNT(*) as Purchases
FROM Times
GROUP BY DATEPART(hour, d), DATEPART(minute, d) / 5
ORDER BY DATEPART(hour, d), DATEPART(minute, d) / 5

这显示了基本思路。 包括开始时间,并限制其只能覆盖一个日子是简单的。

工作SqlFiddle



文章来源: Count events in Sql server?