PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gibt Zeilen zurück, die in Postgresql maximal aus einer Spalte bestehen

Postgres unterstützt Fensterfunktionen die zu dieser Situation passen:

select date, symbol, value, created_time
from (select *,
    rank() over (partition by date, symbol order by created_time desc) as rownum
  from test_table) x
where rownum = 1

Für jede Kombination von date , symbol , gibt diese Abfrage den value zurück und created_time aus der Reihe mit der höchsten (also letzten). ) created_time dieses date und symbol .

Ich würde diesen Index vorschlagen:

CREATE UNIQUE INDEX test_table_idx 
  ON test_table (date, symbol, created_time, value)

Es ist eine Hülle index (verfügt über alle Werte, die Sie für die Abfrage benötigen, sodass Sie nicht auf die eigentliche Tabelle zugreifen müssen und die Sie bereits hatten), aber beachten Sie, dass created_time kommt vor value , also befinden sich die Daten bereits in ihrer Partitionsreihenfolge und value ist das am wenigsten wichtige Attribut, da es nicht an der Bestimmung beteiligt ist, welche Zeile zurückgegeben werden soll.