Heim >Datenbank >MySQL-Tutorial >Wie extrahiere ich die letzte Zeile für jede ID in PostgreSQL?

Wie extrahiere ich die letzte Zeile für jede ID in PostgreSQL?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-28 15:02:11565Durchsuche

How to Extract the Last Row for Each ID in PostgreSQL?

Extrahieren der letzten Zeile für jede ID in Postgresql

Betrachten Sie einen Datensatz mit den Spalten „id“, „date“ und „other_info“. Das Ziel besteht darin, die letzten Informationen (Zeile) für jede eindeutige ID zu extrahieren.

Um dies in Postgresql zu erreichen, werden üblicherweise zwei Methoden verwendet:

Distinct On Operator

Postgresql bietet den Distinct-On-Operator, mit dem Sie angeben können, dass nur eindeutige Werte einer bestimmten Spalte(n) zurückgegeben werden. In diesem Fall kann der Operator wie folgt verwendet werden:

select distinct on (id) id, date, another_info
from the_table
order by id, date desc;

Diese Abfrage stellt sicher, dass nur die letzte Instanz jeder eindeutigen ID zurückgegeben wird, sortiert in absteigender Reihenfolge nach Datum.

Fensterfunktionen

Alternativ können Sie Fensterfunktionen verwenden, um das gleiche Ergebnis zu erzielen. Mit einer Fensterfunktion können Sie Berechnungen oder Aggregationen für eine partitionierte Reihe von Zeilen durchführen. In diesem Fall kann die folgende Abfrage verwendet werden:

select id, date, another_info
from (
  select id, date, another_info, 
         row_number() over (partition by id order by date desc) as rn
  from the_table
) t
where rn = 1
order by id;

Diese Abfrage verwendet die Funktion row_number(), um jeder Zeile innerhalb jeder ID-Partition eine fortlaufende Nummer zuzuweisen. Die where-Klausel filtert die Ergebnisse so, dass nur die Zeilen mit dem höchsten rn-Wert (d. h. die letzte Zeile für jede ID) enthalten sind.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich die letzte Zeile für jede ID in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn