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

Как да създадете GROUP BY на минимална и максимална дата

Това е вид проблем с пропуски и острови с вериги от дати. Бих предложил да използвате left join за да откриете къде започват островите. След това кумулативна сума и агрегиране:

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. Oracle:получаване на максимална стойност на група?

  2. ORA-01591 - Oracle изтрива данни от таблица на отдалечен sql сървър

  3. заредете множество csv в една таблица чрез SQLLDR

  4. Импортирайте една схема в друга нова схема - Oracle

  5. Грешка (2,7):PLS-00428:очаква се клауза INTO в този оператор SELECT