У меня есть следующая таблица (scores
):Как выбрать максимальный балл от каждого отдельного пользователя в этой таблице?
id user date score
---|-----|------------|--------
1 | 10 | 11/01/2016 | 400
2 | 10 | 11/03/2016 | 450
5 | 17 | 10/03/2016 | 305
3 | 13 | 09/03/2016 | 120
4 | 17 | 11/03/2016 | 300
6 | 13 | 08/03/2016 | 120
7 | 13 | 11/12/2016 | 120
8 | 13 | 09/01/2016 | 110
Я хочу, чтобы выбрать max(score)
для каждого отдельного пользователя, используя date
как тай-брейк (в случае ничьей, самые последняя запись должна быть возвращена), так что результаты выглядеть следующим образом (наивысший балл для каждого пользователя, отсортированные по score
в порядке убывания):
id user date score
---|-----|------------|--------
2 | 10 | 11/03/2016 | 450
5 | 17 | 10/03/2016 | 305
7 | 13 | 11/12/2016 | 120
Я использую Postgres, и я не являюсь экспертом SQL любыми средствами. Я пытался что-то подобное следующему, который не работает, потому что не имеет id
колонок включены в group by
:
select scores.user, max(scores.score) as score, scores.id
from scores
group by scores.user
order by score desc
У меня есть ощущение, что мне нужно сделать суб-выбор, но Я не могу заставить соединение работать правильно. Я нашел How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?, но я не могу заставить никого из решений работать для меня, потому что мне нужно вернуть строку id
, и у меня есть возможность связать столбец date
.
@a_horse_with_no_name Вы правы, хорошо поймайте. скопируйте/вставьте ошибку с моей стороны. Я обновил ожидаемый результат. – user2719094