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

Намерете максималните последователни години за всеки идентификатор в таблица (Oracle SQL)

Това ще доведе до желания от вас резултат:

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

РЕДАКТИРАНЕ актуализиран за показване на началните/крайните години на най-дългата продължителност.

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. Защо Oracle 9i третира празен низ като NULL?

  2. Въведение в PL/SQL Ref курсори в Oracle Database

  3. ORA - 00933 объркване с вътрешно съединение и като

  4. ODP.NET изисква ли инсталация на Oracle Client

  5. Функция TANH() в Oracle