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()
.
- Formar grupos de días consecutivos (misma fecha en
grp
) en la subconsultasub
. - Numerar filas con otro
row_number()
llamada, esta vez dividida porgrp
.
Una subconsulta es el mínimo aquí, ya que las funciones de ventana no se pueden anidar.
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.