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

(SQL BigQuery) 使用滞后但数据包含缺失的月份

如何解决(SQL BigQuery) 使用滞后但数据包含缺失的月份

我有下表,其中包含每月数据。但我们没有第三个月。

日期 频率
2021-01-01 6000
2021-02-01 4533
2021-04-01 7742
2021-05-01 1547
2021-06-01 9857

我想把上个月的频率放到下表中。

日期 频率 PREVIoUS_MONTH_FREQ
2021-01-01 6000 NULL
2021-02-01 4533 6000
2021-04-01 7742 NULL
2021-05-01 1547 7742
2021-06-01 9857 1547

我希望 2021-04-01 记录的 PREVIoUS_MONTH_FREQ 为 NULL,因为没有上个月的数据。

我到此为止...

SELECT DATE,FREQUENCY,LAG(FREQUENCY) OVER(ORDER BY DATE) AS PREVIoUS_MONTH_FREQ
FROM Table1

解决方法

使用 CASE 表达式检查前一行是否包含上个月的数据:

SELECT DATE,FREQUENCY,CASE WHEN DATE_SUB(DATE,INTERVAL 1 MONTH) = LAG(DATE) OVER(ORDER BY DATE)
            THEN LAG(FREQUENCY) OVER(ORDER BY DATE)
       END AS PREVIOUS_MONTH_FREQ
FROM Table1 

参见demo

,

在 BigQuery 中,您可以使用 RANGE 窗口规范。唯一的技巧是您需要一个数字而不是日期:

select t.*,max(frequency) over (order by date_diff(date,date '2000-01-01',month)
                            range between 1 preceding and 1 preceding
                           ) as prev_frequence
from t;

'2000-01-01' 是任意日期。这会将日期列转换为自该日期以来的月数。实际日期并不重要。

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