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

Oracle SQL как да групирате по, но да имате няколко реда, ако групата се повтори на по-късна дата

Това е проблем с пропуски и острови. Има различни подходи, но простият използва разлика в номера на реда:

with paaf as (<your first query here>
     )
select paaf.assignment_id,
       paaf.position_id,
       min(paaf.effective_start_date) as effective_start_date,
       max(paaf.effective_end_date) as effective_end_date
from (select paaf.*,
             row_number() over (order by effective_start_date) as seqnum,
             row_number() over (partition by position_id order by effective_start_date) as seqnum_p
      from paaf
     ) paaf
group by (seqnum - seqnum_p), position_id, assignment_id;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Промяна на тази заявка за групиране на редове и филтриране на всички редове с изключение на този с най-малка стойност

  2. Присъединяването отнема твърде много време

  3. Импортирайте CSV файл във външна таблица на Oracle

  4. Стойност за търсене във всички таблици на базата данни

  5. Оракул. Как да изведем дата и час?