SQL中从去年月份到今年月份的数字总和

时间:2018-11-28 20:39:14

标签: sql sql-server sql-server-2008

作为一个初学者,我很难在SQL Server 2008中编码这种特殊情况

enter image description here

如您所见, 例如,2017年7月的SUM列等于以下内容: 2016年8月至12月+ 2017年1月至7月= 4625

类似地,2017年8月的SUM列等于以下内容: 2016年9月至12月+ 2017年1月至8月= 4625

enter image description here

如何每月自动执行此操作?

我很高兴能获得帮助。尝试在SQL Server 2008中对此进行编码

2 个答案:

答案 0 :(得分:1)

使用这种方法来查找当月的第一天:

select dateadd(month, datediff(month, 0, getdate()), 0)

我们可以扩展它以获得一年前的下个月的第一天,即11个月前。

select dateadd(month, datediff(month, 0, dateadd(month,-11,getdate())), 0)

然后,我们只需要在where子句中使用它来限制您的数据...

declare @startDate = (select dateadd(month, datediff(month, 0, dateadd(month,-11,getdate())), 0))
declare @endDate = getdate()

select sum(someColumn)
from someTable
where dateColumn between @startDate and @endDate

由于您没有提供实际的数据集,而只是提供一些数据透视,因此我不确定您的列名和表名

答案 1 :(得分:0)

这听起来像您想要窗口功能。假设您的数据已按月汇总:

select t.*,
       sum(numbers) over (order by yyyymm rows between 11 preceding and current row) as prev_12_sum
from t;

如果尚未汇总数据,则也可以将其放在group by中:

select year(date), month(date),
       sum(sum(numbers)) over (order by year(date), month(date) rows between 11 preceding and current row) as prev_12_sum
from t
group by year(date), month(date)
order by min(date);