【问题标题】:Select max date per year选择每年的最大日期
【发布时间】:2020-12-10 12:56:09
【问题描述】:
我的表格如下:
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
我想为每位用户选择每年的最大日期,所以结果如下:
user_id date
1 2020-11-15
1 2019-12-15
2 2020-11-15
2 2019-12-15
3 2020-10-15
一些帮助?
谢谢!
【问题讨论】:
标签:
sql
postgresql
select
subquery
max
【解决方案1】:
只使用聚合:
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;
【解决方案2】:
你可以使用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