so wählen Sie nur die Zeile mit der max-Sequenz ohne Verwendung einer Unterabfrage?
Ich versuche, wählen Sie nur die Zeile mit der höchsten seq für jede ID
ID | Seq | Age
-------------------
A 1 20
A 2 30
B 1 25
B 2 32
B 3 44
B 4 48
C 1 11
Diese scheint zu funktionieren
SELECT ID, Age
FROM Persons a
WHERE Seq = (SELECT MAX(Seq) FROM Persons b WHERE a.ID = b.ID)
Aber ist dies der beste Weg, der einzige Weg? Ich weiß nicht, wie mithilfe von Unterabfragen, wenn ich nicht, und ich erinnere mich, die Sie verwenden können, etwas, aber ich vergessen, was es ist. Irgendeine Idee?
- Was rdbms verwenden Sie?
- Vor allem SQL-Server, aber wenn es oracle kompatibel ist, dann ist das genial
- Meine
ROW_NUMBER
Ansatz funktioniert auch in Oracle als ich getestet habe, mit SQl-Geige. Haben Sie einen Blick auf den link in meiner Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, SQL-Server ( >= 2005) oder Oracle (10g?):
ROW_NUMBER
gibt die laufende Nummer einer Zeile innerhalb einer partition eines Resultsets.Bearbeiten: funktioniert auch in Oracle wie Sie hier sehen können: http://sqlfiddle.com/#!4/b7e79/2/0
Im Allgemeinen, Sie brauchen, um die Verwendung von windowing-oder ranking-Funktionen -
Rank()
,Row_number()
usw.Dies funktioniert in SQL Server 2005+ - in oracle müssen Sie möglicherweise zur Angabe der Feldnamen explizit, statt der
*
Nur im Falle der Verwendung eines RDBMS nicht unterstützt window-Funktionen, die Sie verwenden können:
Es beinhaltet eine Unterabfrage, aber ich sehe nicht einen Weg, dies zu tun, ohne ein, ich bin auch nicht wirklich verstehen, warum würden Sie wollen, um Sie zu vermeiden.