如何使用SQL创建数据累积报告?

6 sql sql-server

我有这个表DDL:

CREATE TABLE [dbo].[Audit] (
    [AuditId] INT              IDENTITY (1, 1) NOT NULL,
    [Entity]  INT              NOT NULL,
    [Action]  INT              NOT NULL,
    [Id]      UNIQUEIDENTIFIER NULL,
    CONSTRAINT [PK_Audit] PRIMARY KEY CLUSTERED ([AuditId] ASC)
);
Run Code Online (Sandbox Code Playgroud)

更新 - 我在这里添加了缺少的SQL.对于那个很抱歉

我所做的是使用这个SQL创建一个SQL报告,它会告诉我每天有多少活动:

select [col1] = CONVERT(VARCHAR(10), DATEADD(HOUR, 8, a.date), 101) ,
       [Col2] = convert(varchar, count(*))
from Audit a
group by CONVERT(VARCHAR(10), DATEADD(HOUR, 8, a.date), 101)
order by CONVERT(VARCHAR(10), DATEADD(HOUR, 8, a.date), 101) desc
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

col1        Col2
03/05/2017  1
03/04/2017  20
03/03/2017  10
03/02/2017  5
03/01/2017  10
Run Code Online (Sandbox Code Playgroud)

我现在需要做的是创建一个SQL选择,它显示累积值而不是计数.所以我需要SQL来创建一个能够显示这一点的报告

col1        Col2
03/05/2017  46
03/04/2017  45
03/03/2017  25
03/02/2017  15
03/01/2017  10
Run Code Online (Sandbox Code Playgroud)

有没有人知道我如何修改我的SQL来创建这种类型的报告?

请注意,我真的在寻找一个命令解决方案,因为它是从.net框架执行的,如果解决方案中有多个命令,我想我需要弄清楚如何以某种方式将它放入存储过程.

Joh*_*tti 5

您可以使用窗口函数 Sum() Over

Select col1 = convert(varchar(10),cast(dateadd(HOUR, 8, a.date) as date),101)
      ,col2 = sum(count(*))  over (Order by cast(dateadd(HOUR, 8, a.date) as date))
 From  Audit a
 Group by cast(dateadd(HOUR, 8, a.date) as date)
 Order By cast(dateadd(HOUR, 8, a.date) as date) Desc
Run Code Online (Sandbox Code Playgroud)

返回

col1        Col2
03/05/2017  46
03/04/2017  45
03/03/2017  25
03/02/2017  15
03/01/2017  10
Run Code Online (Sandbox Code Playgroud)

  • [踢坏的习惯:使用日期/时间操作的简写 - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-与-日期时间operations.aspx) (2认同)