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
我有 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