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

Oracle chọn dữ liệu theo các khối ngày liền kề

Có vẻ như vấn đề "khoảng trống và đảo":

WITH cte("hash","date") AS (
    SELECT 'abcd',  DATE'2017-11-01' FROM dual UNION ALL
    SELECT 'abcd',  DATE'2017-11-02' FROM dual UNION ALL
    SELECT 'abcd',  DATE'2017-11-03' FROM dual UNION ALL
    SELECT 'wxyz',  DATE'2017-11-04' FROM dual UNION ALL
    SELECT 'wxyz',  DATE'2017-11-05' FROM dual UNION ALL
    SELECT 'abcd',  DATE'2017-11-06' FROM dual UNION ALL
    SELECT 'wxyz',  DATE'2017-11-07' FROM dual UNION ALL
    SELECT 'abcd',  DATE'2017-11-08' FROM dual UNION ALL
    SELECT 'abcd',  DATE'2017-11-09' FROM dual UNION ALL
    SELECT 'lmno',  DATE'2017-11-10' FROM dual UNION ALL
    SELECT 'lmno',  DATE'2017-11-11' FROM dual 
)
select "hash"
      ,min("date") as startdate
      ,max("date") as enddate
from (
    select "date","hash"
         , row_number() over (order by "date") 
         - row_number() over (partition by "hash" order by "date") as grp
    from cte
) A
group by "hash", grp
ORDER BY startdate;

Bản trình diễn DBFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JUnit / HSQLDB:Cách khắc phục lỗi với cú pháp Oracle khi kiểm tra bằng HSQLDB (không có đặc quyền và / hoặc không có đối tượng DUAL)

  2. Hoàn tác và làm lại trong cơ sở dữ liệu Oracle là gì

  3. ODP.NET / EF6 - kiểu dữ liệu CHAR trong mệnh đề WHERE

  4. Cách nối nhiều hàng theo thứ tự trong Oracle10g

  5. Làm cách nào để cài đặt mô-đun node-oracledb trên AWS centos6 thông qua dòng lệnh?