POSTGRES - LIMIT 1 DESC для каждого ID в WHERE IN

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

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

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

POSTGRES - LIMIT 1 DESC для каждого ID в WHERE IN

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

Что-то типа

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

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

Спасибо.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
1 071
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В 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. Уникальные ключи идут первыми, а остальные ключи определяют, «какая» строка.

SELECT code, MAX(start_date)
FROM movies
GROUP BY code

Это не вернет поле id (или поля, отличные от code и start_date). OP запрашивает SELECT *, так что это не сработает :(

drone.ah 23.09.2020 12:16

Другие вопросы по теме