[英]How to aggregate YTD measure dynamically
我有一个表,它有 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) 之前的年份,查询正在汇总整个年份计数。
从每天聚合开始:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.