获取数据库中每个用户的最新状态更新

Get latest status update for every user in the database

我有 status_updates table 其中包含每个用户的每个状态更新的行,

id      nickname    status  timestamp
-----------------------------------------------
14638   lovely_john offline 2020-07-14 08:37:18
14640   big_papa    online  2020-07-14 08:57:10

当状态改变时,添加一个新行。

如何 select 每个用户的最新单行(根据时间戳)并在一次查询中获取它们?因此,如果我有 100 个用户,我将获得 100 行最新状态更改。

谢谢!

请使用以下查询。你必须使用 ROW_NUMBER()

select id, nickname, status, timestamp
from
(select id, nickname, status, timestamp, row_number() over(partition by user_id order 
by timestamp desc) as rnk) qry
where rnk = 1;

这将为您提供每个用户的最新记录

这最好由 DISTINCT ON

处理
select distinct on (nickname) *
  from status_updates
 order by nickname, timestamp desc;