POSTGRES - LIMIT 1 DESC для каждого идентификатора в WHERE IN - PullRequest
0 голосов
/ 29 мая 2019

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

SELECT * FROM movies WHERE CODE IN ('action', 'comedy')

Вопрос: Как я могу вернуть строку с самой последней датой ДЛЯ КАЖДОГО кода всписок и ограничить его 1, так как могут быть дубликаты:

enter image description here

, поэтому он возвращает только ID 1 и 4.

Что-токак

SELECT * FROM movies WHERE CODE IN ('action', 'comedy') DESC LIMIT 1

но для каждого кода .

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 мая 2019
SELECT code, MAX(start_date)
FROM movies
GROUP BY code
1 голос
/ 29 мая 2019

В Postgres используйте DISTINCT ON:

SELECT DISTINCT ON (CODE) m.*
FROM movies m
WHERE m.CODE IN ('action', 'comedy')
ORDER BY m.CODE, m.start_date DESC;

DISTINCT ON является расширением Postgres. Он возвращает набор результатов с одной строкой на уникальную комбинацию значений выражений в скобках (например, GROUP BY ключей в этом отношении). Конкретная строка определяется предложением ORDER BY. Первыми идут уникальные ключи, а остальные ключи определяют строку "which".

...