目前,我正在努力实现某种重叠的聚合。
我的表的当前结构是:
|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
1条答案
按热度按时间myss37ts1#
您可以构建一个存储时间戳的派生表,将其与不同的用户列表交叉连接以生成所有可能的组合,然后将表与
left join
和骨料: