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

Hvordan grupperes tidsstempler i øer (baseret på vilkårlig hul)?

Dette ville gøre det:

SELECT done, count(*) FILTER (WHERE step) OVER (ORDER BY done) AS grp
FROM  (
   SELECT done
       , (lag(done) OVER (ORDER BY done) <= done - interval '2 min') AS step
   FROM   tbl
   ) sub
ORDER  BY done;

Underforespørgslen sub registrerer step som true hvis den forrige række er mindst 2 minutter væk - sorteret efter tidsstemplet kolonnen done sig selv i dette tilfælde.

Den ydre forespørgsel tilføjer et rullende antal trin, faktisk gruppenummeret (grp ) - kombinerer det samlede FILTER klausul med en anden vinduesfunktion.

db<>spil her

Relateret:

  • Forespørgsel for at finde alle tidsstempler med mere end et bestemt interval fra hinanden
  • Hvordan mærker man grupper i postgresql, når gruppetilhørsforhold afhænger af den foregående linje?
  • Vælg den længste sammenhængende sekvens
  • Grupper eller vindue

Om det samlede FILTER klausul:

  • Hvordan kan jeg forenkle denne spilstatistikforespørgsel?
  • Betinget lead/lag-funktion PostgreSQL?


  1. Sådan angives den invariante kultur, når du bruger FORMAT() i SQL Server

  2. Lignende UTF-8-strenge til autofuldførelsesfelt

  3. Bedømmelse af din Database Performance Monitoring Setup

  4. Brug af Intel Optane Storage til SQL Server