我有这个表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框架执行的,如果解决方案中有多个命令,我想我需要弄清楚如何以某种方式将它放入存储过程.
您可以使用窗口函数 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)