sql >> Databasteknik >  >> RDS >> PostgreSQL

Rangordning baserat på sekvens av datum

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;

Medan du talar om "rank" verkar du vilja ha resultatet av fönsterfunktionen row_number() .

  1. Forma grupper av på varandra följande dagar (samma datum i grp ) i underfrågan sub .
  2. Antal rader med en annan row_number() samtal, denna gång partitionerat med grp .

En underfråga är det absoluta minimum här, eftersom fönsterfunktioner inte kan kapslas.

SQL-fiol.

Observera att jag gick med den andra versionen av dina motsägelsefulla exempeldata. Och resultatet är som @mu föreslog i sin kommentar.
Också förutsatt att det inte finns några dubbletter av datum. Du måste lägga ihop först i det här fallet.



  1. Databashantering och övervakning för PostgreSQL 12

  2. Fråga för att hitta dubbletter mellan namn och nummer i tabellen

  3. Lagring av svenska tecken i mysql databas

  4. ROWID motsvarighet i postgres 9.2