首页 > 解决方案 > 获取最小日期记录并计算特定时间范围内的后续记录

问题描述

我有以下示例表:

用户 日期
一个 2016-01-01
一个 2017-01-01
一个 2018-01-01
一个 2019-01-01
2017-03-05
2017-11-01

我正在努力实现以下目标:

  1. 为每个用户取最短(第一次)日期
  2. 在用户的最短日期之后的 2 年时间范围内计算每个用户的所有后续记录

以下是我想使用 PostgreSQL 实现的示例:

用户 min_date count_of_records_in_following_8_months
一个 2016-07-01 2
2017-03-05 1

标签: sqlpostgresql

解决方案


使用窗口函数来获取最小日期。然后聚合:

select user,
       count(*) filter (where date > min_date and date < min_date + interval '8 month')
from (select t.*, min(date) over (partition by user) as min_date
      from t
     ) t
group by user;

是一个 db<>fiddle。

注意: user是保留字,因此不应用作列名。


推荐阅读