【问题标题】:Breakdown of time spans between a list of Datetime's日期时间列表之间的时间细分
【发布时间】:2010-12-11 13:45:09
【问题描述】:

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

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

如果数据是:

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% 的条目至少与另一个条目一样接近的时间跨度。

非常感谢, 詹姆斯

【问题讨论】:

    标签: sql-server-2005 datetime aggregation


    【解决方案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 来完成,但我更喜欢只需要写出尽可能少的计算...

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2021-01-07
      • 1970-01-01
      • 2017-03-17
      • 2013-11-09
      相关资源
      最近更新 更多