Postgres SQL Выберите два поля по самой последней дате, одно поле должно быть уникальным - PullRequest
1 голос
/ 08 июля 2020
• 1000 и последняя классная комната Боба:
student homeroom    date
Alice   200         2020-02-25
Bob     100         2020-02-01

Типичный ответ о том, как найти самую последнюю запись, применим только к тем случаям, когда вы ищете одно недавнее поле:

SELECT
     student, homeroom, MAX(date::date) AS date
   FROM
     homeroom
   GROUP BY
     student, homeroom

Это не то, что я хочу:

student homeroom    date
Alice   200         2020-02-25
Alice   100         2019-09-16
Bob     100         2020-02-01

Ответы [ 2 ]

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

Вы можете использовать distinct on:

select distinct on (student) hr.*
from homeroom hr
order by student, date desc;

distinct on - очень удобное расширение Postgres. Он возвращается в строке для ключей в списке distinct on. Строка основана на критериях заказа в order by.

1 голос
/ 08 июля 2020

Вы можете использовать row_number()

SELECT student, homeroom, date from
(SELECT
 student, homeroom, date, row_number() over(partition by student order by homeroom, date 
desc) as rnk
FROM
 homeroom) qry WHERE rnk = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...