sql - SQL 获得同比季度至今的收入
问题描述
有下表:
Year Quarter Month Revenue
2005 Q1 1 13
2006 Q1 1 10
2006 Q1 2 15
2006 Q1 3 35
2006 Q2 4 11
2006 Q2 5 15
2006 Q2 6 9
2007 Q1 1 6
2007 Q1 2 14
2007 Q1 3 7
2007 Q2 4 20
2007 Q2 5 6
2007 Q2 6 6
我需要一个查询来计算季度至今收入的同比比较,如下所示:
Year Quarter Month CUrrentQTDRevenue PreviousQTDRevenue
2005 Q1 1 13
2006 Q1 1 10 13
2006 Q1 2 25 13
2006 Q1 3 60 13
2006 Q2 4 11
2006 Q2 5 26
2006 Q2 6 35
2007 Q1 1 6 10
2007 Q1 2 20 25
2007 Q1 3 27 60
2007 Q2 4 20 11
2007 Q2 5 26 26
2007 Q2 6 32 35
我已经设法获得了本年度季度至今的收入
SELECT Year, Quarter, Month
, SUM(Revenue) OVER (PARTITION BY Year, Quarter ORDER BY Year, Quarter, Month)
AS CurrentYearQuarterToDateRevenue
FROM revenue
但我如何进入第二部分?请注意,我不能简单地加入季度和月份,因为例如,2005 年第一季度只有一个月,所以 2006 年第一季度每个月都有 13 个月。
解决方案
在示例中,上一年的收入不一致地应用。如果 YQM 收入在 2007 年与 2006 年以及 2006 年与 2005 年按季度累计,则 13 的值将结转至第一季度的第 2 个月和第 3 个月。像这样的东西
with yqm_ytd_cte(Year, Quarter, Month, YQM_YTD_Revenue) as (
select Year, Quarter, Month,
sum(Revenue) over (partition by Year, Quarter order by Year, Quarter, Month)
from revenue)
select yy.*, isnull(yy_lag.YQM_YTD_Revenue, 0) as Prior_Year_YQM_YTD_Revenue
from yqm_ytd_cte yy
left join yqm_ytd_cte yy_lag on yy.Year=yy_lag.Year-1
and yy.Quarter=yy_lag.Quarter
and yy.Month=yy_lag.Month;
推荐阅读
- generics - 如何使 Rust 通用结构/特征需要一个盒子
? - c# - 无法获取元素的值
- visual-studio-code - 在 VS Code 中支持自定义 babel 解析器
- c# - SixLabors ImageSharp 裁剪调整错误的宽度和高度
- javascript - D3 v4 将画笔添加到多行并缩放
- webpack - 阻止 WebPack 5 导入和捆绑第三方库?
- python-3.x - 过滤数据框的行,其中所有指定的列在熊猫中都具有空值
- java - 如何在 Jenkins 管道插件中将输出写入控制台输出?
- flutter - 在启用了 null 安全的应用 dart 中使用非 null 安全包
- javascript - 如何在 Container 或 Div 上而不是在其下方呈现我的弹出组件