Ciężko mi to zrobić bez przeszukiwania tego samego stołu co najmniej dwa razy, aby pobrać maksymalny wiersz, a następnie pobrać wartość dla tego wiersza. Ta tabela jest dość duża, więc jest to niedopuszczalne.Powróć wiersz z maksymalną wartością jednej kolumny na grupę
Oto co moja tabela może wyglądać tak:
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
muszę zwrócić wynik, że każde ID dostał w ostatniej rundzie. Oznacza to, że rząd ma maks. (Rundę), ale nie maksymalną liczbę punktów.
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
Teraz mam:
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;
To działa, ale jest bardzo nieefektywne (muszę ręcznie odfiltrować wszystkie z tych wierszy, kiedy należy po prostu być w stanie nie chwycić te wiersze w pierwsze miejsce.)
Co mogę zrobić, aby uzyskać prawidłowe wartości?
mi się podoba; bardzo czysto. – Jeremy