作为一个初学者,我很难在SQL Server 2008中编码这种特殊情况
如您所见, 例如,2017年7月的SUM列等于以下内容: 2016年8月至12月+ 2017年1月至7月= 4625
类似地,2017年8月的SUM列等于以下内容: 2016年9月至12月+ 2017年1月至8月= 4625
如何每月自动执行此操作?
我很高兴能获得帮助。尝试在SQL Server 2008中对此进行编码
答案 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);