【问题标题】:Count a register between dates计算日期之间的寄存器
【发布时间】:2021-06-02 19:08:55
【问题描述】:

我有一个课程表(名称、开始日期、结束日期),我需要计算开始日期和结束日期之间每一年的每门课程。

例如,有这样的样本:

| name | start_date | end_date   |
----------------------------------
| c1   | 2019-01-01 | 2022-12-01 |
| c2   | 2020-01-01 | 2025-12-01 |
| c3   | 2018-01-01 | 2022-12-01 |

我需要返回多年来活跃的课程数量,如下所示:

| year | count_courses |
| 2018 | 1             | 
| 2019 | 2             | 
| 2020 | 3             | 
| 2021 | 3             |
| 2022 | 3             |
| 2023 | 1             | 
| 2024 | 1             |
| 2025 | 1             | 

有可能吗?

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    生成年份,然后使用某种聚合。如:

    select gs.yyyy, count(s.start_date)
    from generate_series('2018-01-01'::date,
                         '2025-01-01'::date,
                         interval '1 year'
                        ) gs(yyyy) left join
         sample s
         on s.start_date <= gs.yyyy and
            s.end_date > gs.yyyy
    group by gs.yyyy;
    

    这计算了 1 月 1 日活跃的数量,这似乎与您的要求一致。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多