Что-то вроде SELECT DISTINCT ON, но для N> 1 - PullRequest
0 голосов
/ 03 мая 2020

Если я хочу получить первую строку или самую последнюю строку в поле в postgres, select distinct on выглядит великолепно, см. Этот ответ .

DISTINCT ON это синтаксис для получения ровно 1 записи. Но что, если я хочу N самых последних записей? Как бы я преобразовал это:

CREATE VIEW your_view AS
SELECT DISTINCT ON (id) *
FROM your_table a
ORDER BY id, date DESC;

Но для

"Выберите самые последние n = 2 записи для идентификатора", а не "выберите самые последние n = 1 записи для идентификатора?" ?

Я предполагаю, что это группа по подзапросу, но я не совсем ее вижу.

1 Ответ

1 голос
/ 03 мая 2020

Для запросов с n> 1 вы обычно используете оконную функцию:

select *
from (
  select *, row_number() over (partition by id order by "date" desc" as rn
  from the_table
) x
where rn <= 2;
...