PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Класиране въз основа на последователност от дати

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;

Докато говорите за "ранг", изглежда, че искате резултата от функцията прозорец row_number() .

  1. Формирайте групи от последователни дни (една и съща дата в grp ) в подзаявка sub .
  2. Номерирайте редове с друг row_number() повикване, този път разделено от grp .

Една подзаявка е минимумът тук, тъй като прозоречните функции не могат да бъдат вложени.

SQL Fiddle.

Обърнете внимание, че използвах втората версия на вашите противоречиви примерни данни. И резултатът е както @mu предложи в неговия коментар.
Също така ако приемем, че няма дублирани дати. В този случай първо трябва да съберете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails + PostgreSQL - Използване на Like

  2. Как да получите средни стойности за времеви интервали в Postgres

  3. docker postgres pgadmin локална връзка

  4. postgresql тригер на tvector колона получава ГРЕШКА:колоната не съществува

  5. превърнете отделната стойност на колони в редове postgres