【问题标题】:Select 1 row per group by based on multiple criteria根据多个条件选择每组 1 行
【发布时间】:2020-03-31 07:59:12
【问题描述】:

在一个大型数据集中,我尝试根据两个条件为每个 property_id 选择 1 行

  • first:最近recording_date的行
  • 第二个:如果最近的recording_date 被多条记录共享,则取售价最高的一条(如果有)

数据样本如下所示,表名:deeds

id                                   | property_id                          | recording_date | sale_price 
9bf7de90-0b3f-40b0-83bb-9392831a03a3 | 002bb6d2-e064-4eb4-adc2-45713836dfe1 | 2005-12-22     | 535000     
30725c07-b4ab-484b-b09e-30592716340b | 002bb6d2-e064-4eb4-adc2-45713836dfe1 | 2017-09-27     |            
c194b85a-3fb3-46e0-94f0-eeaba1e961e4 | 002bb6d2-e064-4eb4-adc2-45713836dfe1 | 2017-09-27     | 566000     

(如果这很重要,我正在使用 Postgres)

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    使用distinct on:

    select distinct on (property_id) t.*
    from t
    order by property_id, recording_date desc, sales_price desc nulls last
    

    【讨论】:

    • 非常感谢您的回答!我必须添加recording_date desc 才能获得最新的recording_date,所以不确定您是否想更新答案,但除此之外它效果很好。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多