sql >> Databáze >  >> RDS >> PostgreSQL

Pořadí založené na pořadí dat

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;

Zatímco mluvíte o „hodnocení“, zdá se, že chcete výsledek funkce okna row_number() .

  1. Vytvářejte skupiny po sobě jdoucích dnů (stejné datum v grp ) v poddotazu sub .
  2. Očíslujte řádky jiným row_number() volání, tentokrát rozdělené podle grp .

Jeden dílčí dotaz je zde naprosté minimum, protože funkce okna nelze vnořovat.

SQL Fiddle.

Všimněte si, že jsem použil druhou verzi vašich protichůdných ukázkových dat. A výsledek je takový, jak @mu navrhl v jeho komentáři.
Také za předpokladu, že neexistují žádná duplicitní data. V tomto případě byste museli nejprve agregovat.



  1. Jak zkontrolovat oprávnění (DDL,DML,DCL) u objektů přiřazených ke schématu, rolím v databázi Oracle?

  2. Import ze souborů a export do souborů pomocí příkazového řádku MySQL

  3. Odezva dotazu před provedením a bez provedení v aktivním záznamu codeigniter

  4. Použití boolean v PL/SQL