如何获取每个user_id的最后一个值(postgreSQL)

时间:2019-08-29 12:08:00

标签: sql postgresql

当前用户比率是他在“比率历史记录”表中最后一次插入的比率

user_id | year | month | ratio

例如,如果ID为1的用户有两行

1 | 2019 | 2 | 10
1 | 2019 | 3 | 15

他的比率是15。

开发表中有一些片子

user_id | year | month | ratio
1 | 2018 | 7 | 10
2 | 2018 | 8 | 20
3 | 2018 | 8 | 30
1 | 2019 | 1 | 40
2 | 2019 | 2 | 50
3 | 2018 | 10 | 60
2 | 2019 | 3 | 70

我需要一个查询,该查询将按user_id及其最后的比率选择分组的行。

作为请求的结果,应选择以下条目

user_id | year | month | ratio
    1 | 2019 | 1 | 40
    2 | 2019 | 3 | 70
    3 | 2018 | 10 | 60

我尝试使用此查询

select rh1.user_id, ratio, rh1.year, rh1.month from ratio_history rh1
join (
    select user_id, max(year) as maxYear, max(month) as maxMonth
    from ratio_history group by user_id
    ) rh2 on rh1.user_id = rh2.user_id and rh1.year = rh2.maxYear and rh1.month = rh2.maxMonth

但是我只有一行

1 个答案:

答案 0 :(得分:1)

使用distinct on

select distinct on (user_id) rh.*
from ratio_history rh
order by user_id, year desc, month desc;

distinct on是非常方便的Postgres扩展。它返回括号中的键值的一行吗?哪一行是基于排序标准的第一行。请注意,排序条件需要以括号中的表达式开头。