sql >> Databasteknik >  >> RDS >> PostgreSQL

Returnera rader som är max en kolumn i Postgresql

Postgres stöder fönsterfunktioner som passar den här situationen:

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 varje kombination av date , symbol , returnerar den här frågan value och created_time från raden med högst (dvs. sista ) created_time av det date och symbol .

Jag skulle föreslå detta index:

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

Det är en täckning index (har alla värden du behöver för frågan, vilket undviker behovet av att komma åt den faktiska tabellen, och som du redan hade), men notera att created_time kommer före value , så data är redan i sin partitionsordning och value är det minst viktiga attributet, eftersom det inte deltar i någon bestämning av vilken rad som ska returneras.



  1. Facebook kan inte skrapa metadata efter att jag har flyttat Wordpress till ny server

  2. PostgreSQL dumpar och återställer i olika tidszoner

  3. load_file-funktionen fungerar inte i mysql

  4. IMAP &PHP - Hämtar alla e-postmeddelanden från skickade mappar och inkorgsmappar