Ich habe es schwer, dies zu tun, ohne die gleiche Tabelle mindestens zweimal zu suchen, um die maximale Zeile zu greifen, und dann den Wert für diese Zeile zu greifen. Der fragliche Tisch ist ziemlich groß, das ist inakzeptabel.Return-Zeile mit dem maximalen Wert einer Spalte pro Gruppe
Hier ist, was meine Tabelle aussehen könnte:
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
Ich brauche die Partitur zurückzugeben, die jede ID in der letzten Runde bekam. Das heißt, die Zeile mit dem Maximum (rund), aber nicht die maximale Punktzahl.
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
Im Moment habe ich:
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;
Dies funktioniert, aber ist ziemlich ineffizient (ich manuell alle diese Zeilen herausfiltern, wenn ich sollte nur in der Lage sein, nicht die Zeilen greifen in der erste Platz.)
Was kann ich tun, um die richtigen Werte zu erhalten?
Ich mag es; sehr sauber. – Jeremy