时间间隔跨越日期时间列表

时间:2009-10-30 10:59:06

标签: sql-server-2005 datetime aggregation

我有一个SQL Server 2005数据库表,它有一个datetime列。每次服务处理传入请求时,我都会在此表中写入一个条目。

我想得到的是连续输入之间的时间跨度细分。

如果数据是:

2009-10-30 04:06:57.117
2009-10-30 03:52:44.383
2009-10-30 03:42:00.990
2009-10-30 03:41:59.160
2009-10-30 03:17:07.563

我想:

< 10 minutes: 1
10 - 20 minutes: 2
20 - 30 minutes: 1

细分分组并不重要。我只是想了解条目之间有多长时间。事实上,我最终将其用于确定99%的条目至少与另一条目相近的时间跨度。

非常感谢, 詹姆斯

1 个答案:

答案 0 :(得分:1)

使用这样的表:

CREATE TABLE dbo.foo(bar DATETIME);

然后也许这个:

WITH t AS
(
  SELECT bar, rn = ROW_NUMBER() OVER (ORDER BY bar)
  FROM dbo.foo
),
x AS
(
  SELECT d = DATEDIFF(MINUTE, t1.bar, t2.bar)
  FROM t AS t1
  INNER JOIN t AS t2
  ON t1.rn = t2.rn - 1
),
y AS
(
  SELECT blat = CASE WHEN d < 10 THEN '< 10 '
    WHEN d BETWEEN 10 AND 20 THEN '10 - 20 '
    WHEN d BETWEEN 20 AND 30 THEN '20 - 30 '
    ELSE '> 30 ' END + ' minutes:'
  FROM x
)
SELECT blat, COUNT(*) FROM y GROUP BY blat;

你可以用更少的CTE来做到这一点,但我更愿意只用尽可能少的时间写出计算......