【问题标题】: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 您应该尽快计划升级。

标签: postgresql postgresql-9.3 postgresql-9.4


【解决方案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 并更改开始和结束日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多