PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak pogrupować znaczniki czasu w wyspy (na podstawie arbitralnej luki)?

To by to zrobiło:

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;

Podzapytanie sub zapisuje step jako true jeśli poprzedni wiersz jest oddalony o co najmniej 2 minuty - posortowany według kolumny sygnatury czasowej done w tym przypadku.

Zewnętrzne zapytanie dodaje kroczącą liczbę kroków, w rzeczywistości numer grupy (grp ) - łączenie agregatu FILTER klauzula z inną funkcją okna.

db<>graj tutaj

Powiązane:

  • Zapytanie, aby znaleźć wszystkie znaczniki czasu oddalone od siebie o więcej niż określony odstęp
  • Jak oznaczyć grupy w postgresql, gdy przynależność do grupy zależy od poprzedniego wiersza?
  • Wybierz najdłuższą ciągłą sekwencję
  • Grupowanie lub okno

Informacje o agregacie FILTER klauzula:

  • Jak mogę uprościć to zapytanie o statystyki gry?
  • Warunkowa funkcja wyprzedzenia/opóźnienia w PostgreSQL?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niezgodność wersji Postgresql 9.2 pg_dump

  2. Jak znaleźć tabelę z określoną kolumną w postgresql

  3. Najlepszy sposób na zainstalowanie hstore na wielu schematach w bazie danych Postgres?

  4. Jak przechowywać tablicę lub wiele wartości w jednej kolumnie?

  5. Jak działają widoki bariery bezpieczeństwa PostgreSQL?