Мне нелегко это делать, не выполняя одну и ту же таблицу хотя бы дважды, чтобы захватить максимальную строку, а затем захватить значение для этой строки. Эта таблица довольно большая, поэтому это неприемлемо.Возвращаемая строка с максимальным значением одного столбца на группу
Вот что моя таблица может выглядеть следующим образом:
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
Мне нужно, чтобы вернуть счет, что каждый ID получил в последнем раунде. То есть, строка с максимальным (круглым), но не максимальным счетом.
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
Прямо сейчас у меня есть:
SELECT * FROM
(SELECT id, round,
CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score
FROM
SCORES
where id in (1,2,3)
) scorevals
WHERE
scorevals.round is not null;
Это работает, но довольно неэффективно (я должен вручную отфильтровать все из этих строк, когда я должен просто быть в состоянии не захватить эти строки в на первом месте.)
Что я могу сделать для того, чтобы получить правильные значения?
мне нравится; Очень чистый. – Jeremy