获取每个用户的最后一条记录

2skhul33  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(3)|浏览(212)

所以我的table是这样的
添加PK1 | PK2 | User(not unique)| value 1 | value 2| timestamp
我希望获得每个用户的值1和值2的最新值。我该如何做到这一点呢?
此外,PKs本身并不是独一无二的,而是结合在一起的。

2nbm6dog

2nbm6dog1#

我们可以在这里使用ROW_NUMBER()

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY PK1, PK2 ORDER BY timestamp DESC) rn
    FROM yourTable t
)

SELECT PK1, PK2, value1, value2
FROM cte
WHERE rn = 1;
qc6wkl3g

qc6wkl3g2#

除了蒂姆斯的回答,似乎GROUP BY也能做到这一点

SELECT t1.* FROM youtable t1
JOIN
 (SELECT MIN(timestamp) as minTimestamp,User FROM yourtable GROUP BY User) t2
ON t1.User=t2.User AND t1.timestamp = t2.minTimestamp
ORDER BY t1.User
eqoofvh9

eqoofvh93#

另一种选择是使用PostgreSQL的专有distinct on ()

select distinct on ("User") *
from the_table
order by "User", "timestamp" desc;

相关问题