在 BigQuery 中查找上个月的 MTD(本月至今)计算

时间:2021-01-19 00:47:10

标签: sql google-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 值有点困惑,有什么办法吗?谢谢

1 个答案:

答案 0 :(得分:1)

既然我理解了这个问题,您可以使用相关子查询:

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;

子查询匹配上个月的行(第一个条件),然后比较日期(第二个条件)。

这适用于您提供的数据。

相关问题