Derselbe Effekt kann in Oracle entweder durch Verwendung von first_value()
repliziert werden Funktion oder durch Verwendung einer der rank()
oder row_number()
Funktionen.
Beide Varianten funktionieren auch in Postgres.
first_value()
select distinct col1,
first_value(col2) over (partition by col1 order by col2 asc)
from tmp
first_value
gibt den ersten Wert für die Partition an, wiederholt ihn aber für jede Zeile, daher ist es notwendig, ihn in Kombination mit distinct
zu verwenden um eine einzelne Zeile für jede Partition zu erhalten.
row_number()
/ rank()
select col1, col2 from (
select col1, col2,
row_number() over (partition by col1 order by col2 asc) as rownumber
from tmp
) foo
where rownumber = 1
row_number()
ersetzen mit rank()
in diesem Beispiel ergibt das gleiche Ergebnis.
Ein Merkmal dieser Variante ist, dass sie verwendet werden kann, um das erste N zu holen Zeilen für eine bestimmte Partition (z. B. "letzte 3 aktualisiert"), indem Sie einfach rownumber = 1
ändern zu rownumber <= N
.