[英]Find Previous Month MTD (Month to Date) Calculation in BigQuery
假设我有日期的初始表和日期的每个订单值:
date_order |gross_order|
|---------- |-----------|
|25 Nov | 50 |
|27 Nov |300 |
|26 Dec | 400 |
|29 Dec |300 |
|30 Dec |100 |
所以我用这个查询来计算当前的MTD(从某个月的第1天到那个月的某个日期的一个月内的累计总订单),
select date_order, gross_order, sum(gross_order) OVER (PARTITION date_trunc(date_order,MONTH ORDER BY date_order) AS current_mtd
结果将是这样的:
|date_order |gross_order| current_mtd |
|---------- |-----------|-------------|
|25 Nov | 50 | 50 |
|27 Nov |300 |350 |
|26 Dec | 400 |400 |
|29 Dec |300 |700 |
|30 Dec |100 |800 |
这个想法是还具有日期范围内所有行的上个月 MTD 值,因此在 11 月 25 日和 27 日,以前的 MTD 值将为 0,因为没有先前的总订单值。 在 12 月 30 日的行中,该值将是 11 月 1 日到 30 日之间的总和,即 50 + 350 = 400
预期结果:
|date_order |gross_order| current_mtd | previous_mtd
|---------- |-----------|-------------|-------------|
|25 Nov | 50 | 50 |0 |
|27 Nov |300 |350 |0 |
|26 Dec | 400 |400 |50 |
|29 Dec |300 |700 |350 |
|30 Dec |100 |800 |350 |
我有点想知道如何计算以前的 mtd 值,有什么办法吗? 谢谢
现在我理解了这个问题,您可以使用相关子查询:
with t as (
select date '2020-11-25' as date_order, 50 as gross_order union all
select date '2020-11-27' as date_order, 300 as gross_order union all
select date '2020-12-26' as date_order, 400 as gross_order union all
select date '2020-12-29' as date_order, 300 as gross_order union all
select date '2020-12-30' as date_order, 100 as gross_order
)
select t.*,
(select sum(t2.gross_order)
from t t2
where date_trunc(t2.date_order, month) = date_add(date_trunc(t.date_order, month), interval -1 month) and
extract(day from t2.date_order) <= extract(day from t.date_order)
)
from t;
子查询匹配上个月的行(第一个条件),然后比较日期(第二个条件)。
这适用于您提供的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.