【问题标题】:How to aggregate YTD measure dynamically如何动态聚合 YTD 度量
【发布时间】:2019-12-12 03:09:41
【问题描述】:

我有一个表,其中有 2 个字段 timestamp and count。表格包含自 2016 年 11 月以来的数据。

我必须设置一个查询,每天汇总所有年份的 YTD sum(count)。我没有使用日历年定义,而是使用 11 月至 10 月(明年)。理想情况下,这不应该改变逻辑

2017: 11/01/2016-10/31/2017;
2018: 11/01/2017-10/31/2018;
2019: 11/01/2018-10/31/2019; 
2020: 11/01/2019-10/31/2020

我想要一个查询,该查询将在任何给定的日期汇总 YTD,并将 11 月 1 日作为开始日期。我试过这个查询

select ytd_bucket
,sum(count_field) sum
from
(
select 
timestamp_field,
count_field,
CASE 
WHEN DATE(timestamp_field,"America/Los_Angeles") >= '2019-11-01' THEN '2020'
WHEN DATE(timestamp_field,"America/Los_Angeles") BETWEEN '2018-11-01' AND CAST(CONCAT('2019-',FORMAT_DATE('%m-%d', DATE(CURRENT_TIMESTAMP(),"America/Los_Angeles"))) AS DATE) THEN '2019'
WHEN DATE(timestamp_field,"America/Los_Angeles") BETWEEN '2017-11-01' AND CAST(CONCAT('2018-',FORMAT_DATE('%m-%d', DATE(CURRENT_TIMESTAMP(),"America/Los_Angeles"))) AS DATE) THEN '2018'
WHEN DATE(timestamp_field,"America/Los_Angeles") BETWEEN '2016-11-01' AND CAST(CONCAT('2017-',FORMAT_DATE('%m-%d', DATE(CURRENT_TIMESTAMP(),"America/Los_Angeles"))) AS DATE) THEN '2017'
ELSE NULL END as YTD_bucket
from table
)
group by 1

上面的查询不聚合数字是 YTD 级别。对于 2020 年之前的年份 (ytd_bucket),查询正在汇总整个年份。

【问题讨论】:

  • 在您的帖子中,您的结尾是“...我尝试了这个查询...” .... 和? :-)

标签: sql google-bigquery


【解决方案1】:

从每天汇总开始:

select date(timestamp_field, 'America/Los_Angeles') as dte,
       count(*)
from table
group by dte;

然后,对于 YTD,您想要添加一年并获取日期:

select dte,
       count(*),
       sum(count(*)) over (partition by extract(year from date_add(dte, interval 1 month))
                           order by min(timestamp_field)
                          ) as running_cnt
from (select t.*,
             date(timestamp_field, 'America/Los_Angeles') as dte
      from t
     ) t
group by dte;

【讨论】:

  • 我已经在 BigQuery 中测试了这个查询,但出现了以下错误:“PARTITION BY expression references column created_date which is not grouped or aggregated”。
  • @Joaquim。 . .在这种情况下,我没有意识到 BigQuery 不够聪明,无法识别 GROUP BY 键上的表达式。无论如何,子查询可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 2017-12-26
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多