如何从日期范围中获取所有天数并按这些天数分组?
Posted
技术标签:
【中文标题】如何从日期范围中获取所有天数并按这些天数分组?【英文标题】:How to get all days from a date range and group by those days? 【发布时间】:2020-06-16 07:03:27 【问题描述】:所以我有一个如下表。
user_id start_date end_date
1 2020-06-14 2020-06-16
2 2020-06-15 2020-06-17
....
我想要这样的东西
date user_ids
2020-06-14 1
2020-06-15 1,2
2020-06-16 1,2
2020-06-17 2
【问题讨论】:
与您的问题无关,但是:Postgres 9.3 和 9.4 是 no longer supported 您应该尽快计划升级。 【参考方案1】:您可以尝试将日历表加入当前表,然后按天汇总:
WITH dates AS (
SELECT date_trunc('day', dd)::date AS date
FROM generate_series
( '2020-06-14'::timestamp
, '2020-06-17'::timestamp
, '1 day'::interval) dd
)
SELECT
d.date,
STRING_AGG(t.user_id::text, ',' ORDER BY t.user_id) AS user_ids
FROM dates d
LEFT JOIN yourTable t
ON d.date BETWEEN t.start_date AND t.end_date
GROUP BY
d.date
ORDER BY
d.date;
Demo
如果您需要扩大日历表的范围以涵盖更多实际数据,则只需编辑 CTE 并更改开始和结束日期。
【讨论】:
以上是关于如何从日期范围中获取所有天数并按这些天数分组?的主要内容,如果未能解决你的问题,请参考以下文章