sql >> Base de Datos >  >> RDS >> PostgreSQL

Clasificación basada en la secuencia de fechas

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;

Mientras habla de "rango", parece querer el resultado de la función de ventana row_number() .

  1. Formar grupos de días consecutivos (misma fecha en grp ) en la subconsulta sub .
  2. Numerar filas con otro row_number() llamada, esta vez dividida por grp .

Una subconsulta es el mínimo aquí, ya que las funciones de ventana no se pueden anidar.

SQL Fiddle.

Tenga en cuenta que opté por la segunda versión de sus datos de muestra contradictorios. Y el resultado es como @mu sugirió en su comentario.
Asumiendo también que no hay fechas duplicadas. Tendrías que agregar primero en este caso.