Select 每年最多日期

Select max date per year

我有 table 如下:

user_id  date
1        2020-11-15
1        2020-10-15
1        2020-09-15
1        2019-12-15
1        2019-11-15
2        2020-11-15
2        2020-10-15
2        2019-12-15
3        2020-10-15
3        2020-09-15

我想 select 每个用户每年的最大日期,所以结果会是这样的:

user_id  date
1        2020-11-15
1        2019-12-15
2        2020-11-15
2        2019-12-15
3        2020-10-15

有帮助吗? 谢谢!

只需使用聚合:

select user_id, max(date)
from t
group by user_id, date_trunc('year', date);

如果您需要更多列,请使用 distinct on:

select distinct on (user_id, date_trunc('year', date)) t.*
from t
order by user_id, date_trunc('year', date), date desc;

您可以按如下方式使用not exists

Select t.*
  From your_table t
 Where not exists (select 1 from your_table tt 
                    Where t.id = tt.id
                      And date_trunc('year', t.date) = date_trunc('year', tt.date)
                      And tt.date > t.date)

或者你可以使用row_number解析函数如下:

Select * from
(Select t.*,
       Row_number() over (partition by t.id, date_trunc('year', t.date) 
                          order by t.date desc) as rn
  From your_table t) t
Where rn = 1