Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tìm các bản ghi có phạm vi ngày trùng lặp đệ quy trong Oracle DB

Bạn có thể gán một số nhận dạng nhóm cho các bản ghi. Ý tưởng là tìm các bản ghi không trùng lặp và sử dụng chúng như phần đầu của một nhóm.

Phần sau chỉ định các nhóm cho mỗi bản ghi:

  select t.*, sum(group_start) over (order by dstart) as grp
  from (select t.*,
               (case when not exists (select 1
                                      from t t2
                                      where t2.dstart < t.dstart and t2.dend >= t.dstart
                                     )
                     then 1 else 0
                end) group_start
        from t
       ) t

Nếu bạn chỉ muốn các nhóm cho một bản ghi nhất định thì có một số cách, chẳng hạn như:

with overlaps as (
      <query above>
     )
select o.*
from overlaps o
where o.grp = (select o2.grp from overlaps o2 where o2.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. Chuyển đổi truy vấn SQL sang sử dụng toán tử bộ

  2. Tomcat 6/7 JNDI với nhiều nguồn dữ liệu

  3. Oracle:Chọn ngày giữa các phạm vi ngày bằng SQL

  4. Làm cách nào để lưu trữ các byte trong Oracle Varchar2 và có ASCII được coi là văn bản

  5. Gọi thủ tục lưu trữ Oracle bằng cách sử dụng createNativeQuery