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

Ranga na podstawie sekwencji dat

SELECT heading, thedate
      ,row_number() OVER (PARTITION BY grp ORDER BY thedate) AS rn
FROM  (
   SELECT *, thedate - (row_number() OVER (ORDER BY thedate))::int AS grp
   FROM   demo
   ) sub;

Mówiąc o „rankingu”, wydaje się, że chcesz otrzymać wynik funkcji okna row_number() .

  1. Utwórz grupy kolejnych dni (ta sama data w grp ) w podzapytaniu sub .
  2. Ponumeruj wiersze za pomocą innego elementu row_number() wywołanie, tym razem podzielone przez grp .

Jedno podzapytanie jest tutaj absolutnym minimum, ponieważ funkcji okna nie można zagnieżdżać.

Skrzypce SQL.

Zauważ, że poszedłem z drugą wersją twoich sprzecznych danych przykładowych. Wynik jest taki, jak @mu sugerowane w swoim komentarzu.
Również zakładając, że nie ma zduplikowanych dat. W tym przypadku musisz najpierw dokonać agregacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podłączyć aplikację C# Windows mobile 6.5 do bazy danych Postgres?

  2. Wyzwalacz Postgres po uzyskaniu dostępu do insertu NOWOŚĆ

  3. Postgres to najfajniejsza baza danych – Powód #2:Licencja

  4. Postgresql lewy zewnętrzny sprzężenie w tablicy json

  5. Praca z datami w PostgreSQL