累计超过

时间:2019-09-17 16:08:52

标签: sql sql-server tsql

我正在尝试创建每天每天打开的文件总数,因此我可以将数据用于显示累积结果的图形。

数据基本上是文件打开日期,一个计算字段显示“本月”或“上个月”,具体取决于日期和我要计算的运行总计字段。

Date       Month      Count
====       =====      =====
2019-08-01 Last Month  6
2019-08-02 Last Month  2 
2019-08-03 Last Month  5

我希望获得跑步总成绩...所以6、8、13等

但是我得到的只是我的count字段的行计数(1、2、3等)。

select 
FileDate,

Month,
sum(Count) OVER(PARTITION BY month order by Filedate) as 'Count'

from (
select 
1 as 'Count',
Case
    When month(cast(concat(right(d.var_val,4),substring(d.var_val,4,2),left(d.var_val,2)) as DATE) ) = Month(getdate()) then 'This Month'
    else 'Last Month' 
    end as 'Month'


FROM   data d
left join otherdata m on d.VAR_FileID = m.MAT_FileID
left join otherdata u on m.MAT_Fee_Earner = u.User_ID
left join otherdata br on m.MAT_BranchID = br.BR_ID
WHERE  d.var_no IN ( '1628'  )

and Len(var_val) = 10


)files

where Month(FileDate) in  (MONTH(FileDate()),MONTH(getDate())-1)  
and Year(Filedate) = Year(Getdate())
and Dept = 'Peterborough Property'


group by Month, FileDate, count
GO

我假设我不太了解'OVER'的正确用法-任何指针都很棒!

2 个答案:

答案 0 :(得分:3)

Partition子句指示何时重置计数,因此通过按月进行分区,您仅对每个离散月份的记录进行计数即可获得整个数据集的运行总计,您根本就不需要partition子句order by子句。

答案 1 :(得分:0)

现在请使用OVER子句(使用“ Sentinel”答案)来清除请求,在这种情况下,应按以下方式替换所需的列,以使count对于子查询中的所有行连续增加基于order by子句:for more details on OVER Clause..

sum(Count) OVER (Oder by Filedate) as [Count]
-- or 
sum(Count) OVER (Oder by Filedate desc) as [Count]