Получать последнее обновление статуса для каждого пользователя в базе данных - PullRequest
0 голосов
/ 14 июля 2020

У меня есть таблица status_updates, которая содержит строки с каждым обновлением статуса для каждого пользователя,

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

При изменении статуса добавляется новая строка.

Как выбрать последняя отдельная строка (в соответствии с меткой времени) для каждого пользователя и получить их одним запросом? Итак, если у меня 100 пользователей, я получу 100 строк с последним изменением статуса.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Лучше всего с этим справляется DISTINCT ON

select distinct on (nickname) *
  from status_updates
 order by nickname, timestamp desc;
0 голосов
/ 14 июля 2020

Пожалуйста, используйте запрос ниже. Вы должны использовать 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;

Это предоставит вам последнюю запись для каждого пользователя

...