【问题标题】:How can I group by day but count for past 5 days in SQL Server 2008如何按天分组但在 SQL Server 2008 中计算过去 5 天
【发布时间】:2013-06-16 19:40:42
【问题描述】:

给定一个包含日期列的表格,其中包含类似的数据

   2013-06-07 19:23:04.000
   2013-06-07 19:23:04.000
   2013-06-06 06:47:18.000
   2013-06-06 06:47:17.000
   2013-06-05 01:04:06.000
   2013-06-05 01:04:06.000
   2013-06-04 17:08:11.000
   2013-06-04 17:08:11.000
   2013-06-02 14:50:15.000
   2013-06-02 14:50:15.000
   2013-05-29 15:04:06.000
   2013-05-29 15:04:06.000

我想编写一个每天返回一行的查询,并计算当天和前 3 天的所有记录。

喜欢这个

2013-06-07 - 8
2013-06-06 - 6
2013-06-05 - 6
2013-06-04 - 4
2013-06-02 - 2
2013-05-29 - 2

按天和计数 (*) 的简单分组不起作用,因为它只计算每天而不是每天和 3 天前的记录。

【问题讨论】:

    标签: sql-server-2008 count group-by


    【解决方案1】:

    怎么样

    DECLARE @Table TABLE(
            Val DATETIME
    )
    
    INSERT INTO @Table SELECT '2013-06-07 19:23:04.000'
    INSERT INTO @Table SELECT '2013-06-07 19:23:04.000'
    INSERT INTO @Table SELECT '2013-06-06 06:47:18.000'
    INSERT INTO @Table SELECT '2013-06-06 06:47:17.000'
    INSERT INTO @Table SELECT '2013-06-05 01:04:06.000'
    INSERT INTO @Table SELECT '2013-06-05 01:04:06.000'
    INSERT INTO @Table SELECT '2013-06-04 17:08:11.000'
    INSERT INTO @Table SELECT '2013-06-04 17:08:11.000'
    INSERT INTO @Table SELECT '2013-06-02 14:50:15.000'
    INSERT INTO @Table SELECT '2013-06-02 14:50:15.000'
    INSERT INTO @Table SELECT '2013-05-29 15:04:06.000'
    INSERT INTO @Table SELECT '2013-05-29 15:04:06.000'
    
    ;WITH Vals AS (
            SELECT  CAST(Val AS DATE) ValDateOnly
            FROm    @Table
    )
    
    SELECT distinct ValDateOnly,
            (SELECT COUNT(1) FROM Vals WHERE ValDateOnly BETWEEN DATEADD(day,-3,v.ValDateOnly) AND v.ValDateOnly) Cnt
    FROM    Vals v
    

    SQL Fiddle DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2019-02-17
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多