sql >> Database >  >> RDS >> Oracle

Hoe maak je GROUP BY op min en max datum

Dit is een soort gaps-and-islands-probleem met datumkettingen. Ik raad aan om een ​​left join te gebruiken om te zien waar de eilanden beginnen. Dan een cumulatieve som en aggregatie:

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. Lokale MySQL-variabelen

  2. Hoe te debuggen:Interne fout huidige transactie is afgebroken, opdrachten genegeerd tot einde transactieblok

  3. Een MariaDB-database verplaatsen naar versleutelde en niet-versleutelde toestanden

  4. Hoe TIME_FORMAT() werkt in MariaDB