所以我的桌子看起來像這樣
PK1 | PK2 | User(not unique)| value 1 | value 2| timestamp添加時
我想為每個用戶獲取值 1 和值 2 的最新值。我將如何實作這一目標?
此外,PK 本身并不是唯一的,而是組合在一起的。
uj5u.com熱心網友回復:
我們可以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;
uj5u.com熱心網友回復:
除了Tims的ansser,好像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
uj5u.com熱心網友回復:
另一種選擇是使用 PostgreSQL 的專有distinct on ()
select distinct on ("User") *
from the_table
order by "User", "timestamp" desc;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/514707.html
上一篇:在postgresql的UPDATE查詢中在何處以及如何正確撰寫條件?
下一篇:自我加入究竟是如何作業的?
