【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多