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

Jak utworzyć GROUP BY w dniu min i max?

Jest to rodzaj problemu z lukami i wyspami związanymi z łańcuchami dat. Sugerowałbym użycie left join aby dowiedzieć się, gdzie zaczynają się wyspy. Następnie skumulowana suma i agregacja:

select emp_id, title, min(start_date), max(end_date)
from (select t.*,
             sum(case when tprev.emp_id is null then 1 else 0 end) over
                 (partition by t.emp_id, t.title order by t.start_date) as grouping
      from t left join
           t tprev
           on t.emp_id = tprev.emp_id and
              t.title = tprev.title and
              t.start_date = tprev.end_date + 1
     ) t
group by grouping, emp_id, title;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. funkcja obcinania i zaokrąglania w sql

  2. Data sprawdzenia PL/SQL jest prawidłowa

  3. Konwertuj zapytanie SQL na użycie operatorów zbioru

  4. Jak zaszyfrować hasło w Oracle?

  5. InstallAllOracleASPNETProviders nie działa poprawnie