Last_value() и сгруппировать по

У меня есть набор записей:

lvl | root_id | id
 1  |   3000  | 5000
 2  |   3000  | 5100
 2  |   3000  | 5110
 3  |   3000  | 5200

Мне нужно сгруппировать данные по полям root_id и получить значение id для каждого root_id с максимальным значением lvl:

  root_id | id 
    3000  | 5200

Что-то типа:

SELECT root_id, last_value(id) over (partition by root_id order by last lvl)
FROM t
GROUP BY root_id;

Но я получаю сообщение об ошибке:

Column t.id must appear in the GROUPO BY clause or be used in an aggregate function.

Как я могу это исправить?

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

Ответы 2

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

SELECT DISTINCT ON (root_id) root_id, id
FROM t
ORDER BY root_id, lvl DESC, id DESC

db<>демонстрация скрипки

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

Вы можете попробовать использовать оконную функцию ROW_NUMBER.

Запрос 1:

SELECT root_id , id 
FROM (
    SELECT *, ROW_NUMBER() OVER(partition by root_id order by lvl desc) rn
    FROM t
) t1
WHERE rn = 1

Результаты:

| root_id |   id |
|---------|------|
|    3000 | 5200 |

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