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

Oracle SQL — DENSE_RANK

Jak zrozumiałem, tego potrzebujesz:

select client_ID, status_id, from_date, to_date, 
       sum(start_of_group) over (order by client_ID, from_date) + 1 rank
  from (SELECT c.client_ID, c.status_id, c.from_date, c.to_date,
               case when lag(c.client_ID, 1, c.client_ID) over (order by c.client_ID, c.from_date) = c.client_ID 
                     and lag(c.status_id, 1, c.status_id) over (order by c.client_ID, c.from_date) = c.status_id
                    then 0 else 1 end start_of_group
          FROM client c)
 order by client_ID, from_date

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. Parametr limitu czasu połączenia dla Oracle DB z Pythona

  2. Oracle/Sybase SQL — uzyskaj wartość na podstawie poprzedniego rekordu (nie zwykłą LAG)

  3. Oracle ExecuteNonQuery zawiesza się na ASP.Net

  4. Czy mogę używać wielowątkowości z Perl's DBI i Oracle?

  5. Indeksy Oracle i rodzaje indeksów w Oracle z przykładem