sql >> Database teknologi >  >> RDS >> PostgreSQL

Returner rækker, der er maks. på én kolonne i Postgresql

Postgres understøtter vinduefunktioner der passer til denne situation:

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

For hver kombination af date , symbol , returnerer denne forespørgsel value og created_time fra rækken med den højeste (dvs. sidste ) created_time af denne date og symbol .

Jeg vil foreslå dette indeks:

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

Det er et betræk indeks (har alle de værdier, du har brug for til forespørgslen, hvilket undgår behovet for at få adgang til den faktiske tabel, og som du allerede havde), men bemærk, at created_time kommer før value , så data er allerede i deres partitionsrækkefølge og value er den mindst vigtige egenskab, fordi den ikke deltager i nogen bestemmelse af, hvilken række der skal returneres.



  1. SQL-forespørgsel for at finde en række med et bestemt antal tilknytninger

  2. I stedet for LIKE og ~, hvorfor kun SIMILAR TO virker, når man laver regex-match med alternativer

  3. Hvorfor \G i SELECT * FROM tabelnavn\G?

  4. Sådan opretter du et sikkert login-script i PHP og MySQL