如何从日期范围中获取所有天数并按这些天数分组?

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 并更改开始和结束日期。

【讨论】:

以上是关于如何从日期范围中获取所有天数并按这些天数分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 查询中按不同天数分组?

hive实现用户连续登陆的最大天数

如何在 MDX 中对同一维度进行分组和过滤

SQL选择数据并按日期范围分组数据

获取表格中排除日期范围后的剩余天数

如何在swift 3中为日期添加天数