PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Classificação com base na sequência de datas

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;

Enquanto você fala de "rank", você parece querer o resultado da função window row_number() .
  1. Forma grupos de dias consecutivos (mesma data em grp ) na subconsulta sub .
  2. Número de linhas com outro row_number() chamada, desta vez particionada por grp .

Uma subconsulta é o mínimo aqui, pois as funções da janela não podem ser aninhadas.

SQL Fiddle.

Observe que eu fui com a segunda versão de seus dados de amostra contraditórios. E o resultado é como @mu sugerido em seu comentário.
Assumindo também que não há datas duplicadas. Você teria que agregar primeiro neste caso.