sql >> Database >  >> RDS >> PostgreSQL

Retourneer rijen die maximaal één kolom zijn in Postgresql

Postgres ondersteunt vensterfuncties die bij deze situatie 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

Voor elke combinatie van date , symbol , deze zoekopdracht retourneert de value en created_time uit de rij met de hoogste (dwz laatste ) created_time van die date en symbol .

Ik zou deze index aanraden:

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

Het is een bedekkende index (heeft alle waarden die u nodig heeft voor de query, waardoor u geen toegang hoeft te krijgen tot de eigenlijke tabel en die u al had), maar houd er rekening mee dat created_time komt voor value , dus de gegevens staan ​​al in de partitievolgorde, en value is het minst belangrijke kenmerk, omdat het niet deelneemt aan de bepaling van welke rij moet worden geretourneerd.



  1. Pagina met '?' in plaats van 'é'

  2. Hoe COS() werkt in MariaDB

  3. Een aantal items van een boom opvragen

  4. Ontdek op welk besturingssysteem SQL Server wordt uitgevoerd (T-SQL-voorbeeld)