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

Cách tạo GROUP BY vào ngày tối thiểu và tối đa

Đây là một dạng vấn đề về khoảng cách và đảo với chuỗi ngày. Tôi khuyên bạn nên sử dụng left join để tìm nơi bắt đầu của các hòn đảo. Sau đó là tổng tích lũy và tổng hợp:

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. Ngoại lệ PL / SQL về Cập nhật / Xóa hàng không tồn tại

  2. EF6 có thể tạo các đối tượng mô hình của tôi từ một con trỏ tham chiếu được trả về bởi một thủ tục được lưu trữ oracle không

  3. Oracle SQL tạo đầu ra ngẫu nhiên với các thẻ danh sách

  4. Oracle có bất kỳ hàm băm tích hợp nào không?

  5. thả không gian bảng nếu không tồn tại