【发布时间】:2020-06-05 12:33:52
【问题描述】:
目前我正在努力实现一些有点重叠的聚合。
我表的当前结构是:
|ymd |id|costs|
|--------|--|-----|
|20200101|a |10 |
|20200102|a |12 |
|20200101|b |13 |
|20200101|c |15 |
|20200102|c |1 |
但是,我想以每个项目具有不同时间跨度的方式对其进行分组。考虑到我在 20200103 上运行这个查询,我想要达到的结果是:
| timespan | id | costs |
|------------|----|-------|
| last 2 days| a | 22 |
| last 1 day | a | 12 |
| last 2 days| b | 13 |
| last 1 day | b | 0 |
| last 2 days| c | 16 |
| last 1 day | c | 1 |
我已经尝试了很多事情,但到目前为止我无法实现我所需要的。这是我尝试过的查询,没有正确的结果:
SELECT
CASE
WHEN ymd BETWEEN date_add(current_date(),-2) AND to_date(current_date()) THEN '2 days'
WHEN ymd BETWEEN date_add(current_date(),-1) AND to_date(current_date()) THEN '1 day'
END AS timespan,
id,
sum(costs) AS costs
FROM `table`
GROUP BY
CASE
WHEN ymd BETWEEN date_add(current_date(),-2) AND to_date(current_date()) THEN '2 days'
WHEN ymd BETWEEN date_add(current_date(),-1) AND to_date(current_date()) THEN '1 day'
END,
id
【问题讨论】:
-
日期格式错误。 ymd between date... 仅当 ymd 在 yyyy-MM-dd 中时才能正常工作
-
我只是简化了我发布的示例。我实际上是在使用自定义 UDF 来转换日期并在 ymd 格式之上执行 date_diff