Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Znajdź maksymalną liczbę kolejnych lat dla każdego identyfikatora w tabeli (Oracle SQL)

Spowoduje to uzyskanie pożądanego rezultatu:

select
  id,
  ayear,
  byear,
  yeardiff
from
(
  select
    a.id,
    a.year ayear,
    b.year byear,
    (b.year - a.year)+1 yeardiff,
    dense_rank() over (partition by a.id order by (b.year - a.year) desc) rank
  from
    years a
    join years b on a.id = b.id 
        and b.year > a.year
  where
    b.year - a.year = 
      (select count(*)-1
         from years a1
        where a.id = a1.id
             and a1.year between a.year and b.year)
)
where
  rank = 1

EDYTUJ zaktualizowano, aby wyświetlić lata rozpoczęcia/zakończenia najdłuższego odcinka.

SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. problem ORA-00001:naruszone ograniczenie unikatowe podczas INSERT/UPDATE

  2. Przykład Oracle Bulk Collect przy użyciu obiektu typu kursora typu Rowtype

  3. Odświeżanie / aktualizowanie ekranu formularza w Oracle D2k Forms 6i

  4. Jak mogę usunąć ograniczenie o wartości niezerowej w Oracle, jeśli nie znam nazwy ograniczenia?

  5. Dlaczego statyczne ddl nie jest dozwolone w PL/SQL?