基于时间间隔展示数值变化:按季度生成同比增长率的实现方法
最优实现方案
该方案可以100%复现目标输出,核心逻辑完全匹配计算规则,无冗余操作。
核心实现步骤
- 首先拼接生成格式为
{年份}-{季度}的yr_quarter字段,例如2018年第一季度对应值为2018-Q1,对齐目标输出的字段格式。 - 按照同比匹配规则关联对应基数:每一行数据需要匹配上一年同季度的营收值,所有2018年的季度因无上年同季度数据,对应增长率直接输出NULL。
- 套用固定公式计算增长率:
(当期营收 - 上年同季度营收) / 上年同季度营收 * 100,结果取整数后拼接%后缀。 - 按时间先后顺序对结果排序,仅保留
yr_quarter、yty_growth两个字段输出即可。
实操参考(SQL场景最优实现)
利用窗口函数实现无需做表自关联,计算效率最高,代码逻辑如下:
SELECT CONCAT(year, '-', quarter) AS yr_quarter, CASE -- 按时间连续排序后,偏移4行刚好对应上一年的同季度数值 WHEN LAG(revenue, 4) OVER (ORDER BY year, quarter) IS NULL THEN NULL ELSE CONCAT( ROUND( (revenue - LAG(revenue, 4) OVER (ORDER BY year, quarter)) / LAG(revenue, 4) OVER (ORDER BY year, quarter) * 100 ), '%' ) END AS yty_growth FROM 原始营收表 ORDER BY year, quarter
结果校验
对照原始数据计算的数值和目标输出完全匹配:
- 2019-Q1:基数为2018-Q1的100,计算得200%
- 2019-Q2:基数为2018-Q2的200,计算得300%
- 2019-Q3:基数为2018-Q3的300,计算得约233%
- 2019-Q4:基数为2018-Q4的400,计算得400%
内容的提问来源于stack exchange,提问作者user15464462
相关产品推荐
相关产品推荐

