最近12个月的SQL总和

用户14316330

我正在尝试获取过去12个月(2019年10月至2020年9月等)的总和合法的12个月滚动总和。

    SELECT DATEADD(MONTH, DATEDIFF(Month, 0, ENTRY_DATE), 0) AS Payout_Month, SUM(PRINCIPAL_AMT) Payout_amt, 
SUM(SUM(PRINCIPAL_AMT)) OVER (PARTITION BY YEAR(ENTRY_DATE) ORDER BY MIN(ENTRY_DATE)) as YearRollingSum,
SUM(SUM(PRINCIPAL_AMT)) OVER (PARTITION BY Year(ENTRY_DATE)
                  ORDER BY MIN(ENTRY_DATE)
                  ROWS BETWEEN 12 PRECEDING AND 1 PRECEDING
                 )  AS TwelveMonthRollingSum
FROM ACCOUNTHISTORY
WHERE LEFT(TOKEN_STRING, 4) LIKE '%Py%'
AND FOCUS_TELLER_ID = 6056
AND PRINCIPAL_AMT > 0 AND PRINCIPAL_AMT < 25
AND ENTRY_DATE >= '01/01/2019'
GROUP BY DATEADD(MONTH, DATEDIFF(Month, 0, ENTRY_DATE), 0), YEAR(ENTRY_DATE) 
Order BY DATEADD(MONTH, DATEDIFF(Month, 0, ENTRY_DATE), 0)

这是我当前的输出结果

Payout_Month            Payout_amt  YearRollingSum  TwelveMonthRollingSum
2019-01-01 00:00:00.000 5696.50     5696.50            NULL
2019-02-01 00:00:00.000 11205.60    16902.10          5696.50
2019-03-01 00:00:00.000 23341.50    40243.60          16902.10
2019-04-01 00:00:00.000 25592.80    65836.40          40243.60
2019-05-01 00:00:00.000 28148.30    93984.70          65836.40
2019-06-01 00:00:00.000 27190.90    121175.60         93984.70
2019-07-01 00:00:00.000 25079.80    146255.40         121175.60
2019-08-01 00:00:00.000 30206.90    176462.30         146255.40
2019-09-01 00:00:00.000 28000.80    204463.10         176462.30
2019-10-01 00:00:00.000 29076.60    233539.70         204463.10
2019-11-01 00:00:00.000 29001.30    262541.00         233539.70
2019-12-01 00:00:00.000 28366.00    290907.00         262541.00
2020-01-01 00:00:00.000 32062.40    32062.40          NULL
2020-02-01 00:00:00.000 28526.70    60589.10          32062.40
2020-03-01 00:00:00.000 29056.50    89645.60          60589.10
2020-04-01 00:00:00.000 28016.00    117661.60         89645.60
2020-05-01 00:00:00.000 25173.30    142834.90         117661.60
2020-06-01 00:00:00.000 27646.10    170481.00         142834.90
2020-07-01 00:00:00.000 36083.70    206564.70         170481.00
2020-08-01 00:00:00.000 34872.20    241436.90         206564.70
2020-09-01 00:00:00.000 35727.10    277164.00         241436.90
2020-10-01 00:00:00.000 34030.80    311194.80          277164.00

如您所见,它将在年初重新设置最后一列。有任何想法吗?

专线小巴

基本上,您想partition by从12个月的滚动总和中删除该子句。我还建议对查询进行一些优化:

select 
    x.payout_month, 
    sum(ah.principal_amt) payout_amt, 
    sum(sum(ah.principal_amt)) over (
        partition by year(x.payout_month) 
        order by x.payout_month
    ) as yearrollingsum,
    sum(sum(ah.principal_amt)) over (
        order by x.payout_month
        rows between 12 preceding and 1 preceding
    )  as twelvemonthrollingsum
from accounthistory ah
cross apply (values (datefromparts(year(ah.entry_date), month(entry_date), 1))) x(ah.payout_month)
where 
    left(ah.token_string, 4) like '%py%'
    and ah.focus_teller_id = 6056
    and ah.principal_amt > 0 and principal_amt < 25
    and ah.entry_date >= '20190101'
group by x.payout_month
order by x.payout_month

主要变化是payout_month,使用,在横向连接中仅计算一次datefromparts()然后,您可以在整个查询中使用它,并且可以在order by窗口函数子句中一致地使用它

请注意,如果您有一个月没有任何销售,则您的策略将无法产生正确的结果(rows窗口函数子句将散布在前一个月,这不是您想要的)。如果可能发生这种情况,则替代方法是子查询或其他横向联接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在sql中选择最近的12个月?

来自分类Dev

Oracle SQL-最近12个月的数据

来自分类Dev

最近12个月使用Javascript

来自分类Dev

最近12个月如何列出

来自分类Dev

最近12个月如何列出

来自分类Dev

SQL最近6个月

来自分类Dev

SQL最近6个月

来自分类Dev

SQL Server-过去12个月的累积总和,但从上个月开始(SQL Server 18)

来自分类Dev

生成最近12个月的结束日期

来自分类Dev

在rails 2.3.8中查找最近12个月的记录

来自分类Dev

使用mysql从最近12个月获取数据

来自分类Dev

SQL查询以获取最近3个月的数据

来自分类Dev

最近13个月的SQL WHERE子句

来自分类Dev

最近六个月的“完整” SQL

来自分类Dev

SQL最近三个月

来自分类Dev

计算每个月最近12个月的平均值?

来自分类Dev

最近13个月的数据

来自分类Dev

最近五个月的排列

来自分类Dev

在LINQ的最近3个月

来自分类Dev

MySQL最近12个月的月度销售,包括无月销售

来自分类Dev

如何以正确的月份顺序显示最近12个月的滚动

来自分类Dev

Delphi&SQLite:获取最近12个月每月的记录数

来自分类Dev

在Postgres中从Db获取最近12个月的数据以及年份

来自分类Dev

Qlikview文本对象(框)中最近12个月的ID计数

来自分类Dev

MSSQL2012(Over / Partition)最近12个月,是否包含null?

来自分类Dev

在PowerBI中未正确计算过去12个月的总和

来自分类Dev

如何从sql表中获取最近3个月的数据

来自分类Dev

SQL Server:将SELECT限制为仅获取最近4周/ 1个月的数据

来自分类Dev

自动产生12个月