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

Postgres Langsom gruppe efter forespørgsel med max

Det, du har brug for, er en "spring over scanning" eller "scanning af løs indeks ". PostgreSQL's planlægger implementerer endnu ikke disse automatisk, men du kan narre den til at bruge en ved at bruge en rekursiv forespørgsel.

WITH RECURSIVE t AS ( SELECT min(eventtype) AS eventtype FROM allevents UNION ALL SELECT (SELECT min(eventtype) as eventtype FROM allevents WHERE eventtype > t.eventtype) FROM t where t.eventtype is not null ) select eventtype, (select max(eventtime) from allevents where eventtype=t.eventtype) from t;

Der kan være en måde at kollapse max(eventtime) i den rekursive forespørgsel i stedet for at gøre det uden for den forespørgsel, men hvis det er tilfældet, har jeg ikke ramt det.

Dette kræver et indeks på (eventtype, eventtime) for at være effektiv. Du kan få det til at være DESC på eventtidspunktet, men det er ikke nødvendigt. Dette er effektivt kun, hvis eventtype kun har nogle få forskellige værdier (21 af dem, i dit tilfælde).



  1. Tilslutning af ODBC-applikationer til MySQL

  2. LINQPad og Oracle

  3. MySQL UNIQUE-nøgle virker ikke

  4. Kan der være en databaseagnostisk SQL-forespørgsel til at hente de øverste N rækker?