Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment créer GROUP BY à la date min et max

Il s'agit d'un type de problème d'espaces et d'îlots avec les chaînes de date. Je suggérerais d'utiliser une left join pour trouver où commencent les îles. Puis une somme cumulée et une agrégation :

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;