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

Rangering baseret på rækkefølge af datoer

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;

Mens du taler om "rang", ser du ud til at ønske resultatet af vinduesfunktionen row_number() .

  1. Form grupper af på hinanden følgende dage (samme dato i grp ) i underforespørgsel sub .
  2. Nummerer rækker med en anden row_number() opkald, denne gang opdelt af grp .

Én underforespørgsel er det absolutte minimum her, da vinduesfunktioner ikke kan indlejres.

SQL Fiddle.

Bemærk, at jeg gik med den anden version af dine modstridende eksempeldata. Og resultatet er som @mu foreslået i sin kommentar.
Også forudsat, at der ikke er dubletdatoer. Du skal først samle dig i dette tilfælde.



  1. Indsættelse af en simpel liste i MySQL-tabel (php)

  2. Hvordan løser jeg denne fejl? Forældet:mysql_escape_string():Denne funktion er forældet; brug mysql_real_escape_string() i stedet

  3. Pandas 0.20.2 to_sql() ved hjælp af MySQL

  4. Hvordan sikrer man poster med ikke-overlappende tidsintervaller?