微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL获取四分之一季度值

如何解决SQL获取四分之一季度值

我想从具有第3季度和第4季度数据的数据集获得QoQ,该数据集还具有报告日期列,每行每个财政月应具有QoQ值(以报告日期表示),第4季度应与第3季度进行比较但我的发言似乎只是在同一季度内进行比较,即Q4与Q4进行了比较,而不是Q4与Q3进行了比较。.

我正在使用lag函数,但是不确定是否有人在看下面的代码,这是我做错了。

 SELECT [Year],[SalesDate] as Report_Date,[Quarter],Sales,LAG(Sales,1,0) OVER(
       PARTITION BY [Year],[Quarter]
       ORDER BY [Year],salesDate
                ASC) AS [QuarterSales_Offset],sales - LAG(Sales) OVER(
       PARTITION BY [Year],salesDate
                ASC) as diff,Case When 
LAG(Sales,salesDate
                ASC) = 0 then null else

(
sales - LAG(Sales,salesDate
                ASC))/ LAG(Sales,salesDate
                ASC) end as QoQ
FROM dbo.ProductSales_2;

查询输出

enter image description here

解决方法

由于block以1个偏移量返回了上一行,并且您的数据处于月级水平,因此实际上您在每个季度中逐月比较。考虑一种不同的方法,例如按季度和按季度连接数据的两个子集。

LAG()列可以使用QuarterMonth表达式进行计算(即,每个季度的连续月份计数)。由于销售数据可能会出现月份差异,因此请使用与您的会计年度对齐的ROW_NUMBER()日历表。总之,这允许按列比较第一季度第四季度(year_quarter_month)与第一季度第三季度(2020-08-31)。

2020-05-31

您也许可以推广到任何季度计算,而不仅仅是第三季度和第四季度:

WITH unit AS (
   SELECT yqm.[Year],yqm.[Quarter],yqm.[Month],COALESCE(p.[Report_Date],DATEADD(DAY,-1,DATEFROMPARTS(yqm.[Year],yqm.[Month]+1,1))) AS [Report_Date],p.[Sales]
   FROM year_quarter_month_table yqm
   LEFT JOIN dbo.ProductSales_2 p
      ON yq.[Year] = p.[Year]
      AND yq.[Quarter] = p.[Quarter]
      AND yq.[Month] = p.[Month]

),sub AS (
   SELECT [Year],[Quarter],[Month],ROW_NUMBER() OVER(PARTITION BY [Year],[Quarter] 
                            ORDER BY [Report_Date]) AS [QuarterMonth],[Report_Date],[Sales]
   FROM unit
 )

SELECT q4.[Year],q4.[Report_Date] AS Q4_Date,q4.[Sales] AS Q4_Sales,q3.[Report_Date] AS Q3_Date,q3.[Sales] AS Q3_Sales,q4.[Sales] - q3.[Sales] AS Diff,COALESCE((q4.[Sales] - q3.[Sales]) / q3.[Sales],0) AS QoQ
FROM sub q4
LEFT JOIN sub q3
   ON  q4.[Year] = q3.[Year]
   AND q4.[Quarter] = 4
   AND q3.[Quarter] = 3
   AND q4.[QuarterMonth] = q3.[QuarterMonth]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。