sql >> Database >  >> RDS >> PostgreSQL

Rangschikking op volgorde van datums

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;

Terwijl u spreekt van "rang" lijkt u het resultaat te willen hebben van de vensterfunctie row_number() .

  1. Vorm groepen van opeenvolgende dagen (dezelfde datum in grp ) in subquery sub .
  2. Nummer rijen met een andere row_number() oproep, deze keer gepartitioneerd door grp .

Eén subquery is hier het absolute minimum, aangezien vensterfuncties niet genest kunnen worden.

SQL Fiddle.

Merk op dat ik ging met de tweede versie van uw tegenstrijdige voorbeeldgegevens. En het resultaat is zoals @mu suggereerde in zijn commentaar.
Ook ervan uitgaande dat er geen dubbele datums zijn. In dit geval moet u eerst aggregeren.



  1. Het Kapsalon Database Project

  2. SQLite groeperen op

  3. UUID gebruiken met EclipseLink en PostgreSQL

  4. SQL Server Intellisense werkt niet op *sommige* servers