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

SQL Oracle - Kết hợp các hàng liên tiếp với bộ lọc

Bốn năm đã trôi qua kể từ khi câu hỏi này được đặt ra. Nhưng Oracle đã thêm MATCH_RECOGNIZE cho Oracle 12c và điều này làm cho giải pháp đơn giản hơn.

SELECT
  foo_id, high_speed, speed,
  NVL(DateFromZ, DateFrom) DateFrom,
  NVL(DateToZ, DateTo) DateTo
FROM test
MATCH_RECOGNIZE (
  ORDER BY RecordId
  MEASURES
    FIRST(zeros.DateFrom) AS DateFromZ,
    FINAL LAST(zeros.DateTo) AS DateToZ,
    COUNT(*) AS cnt
  ALL ROWS PER MATCH WITH UNMATCHED ROWS
  PATTERN (zeros+)
  DEFINE
    zeros AS zeros.speed = 0
)
WHERE speed > 0 OR cnt = 1
ORDER BY RecordId;

Đầu ra:

+--------+------------+-------+------------+------------+
| FOO_ID | HIGH_SPEED | SPEED |  DATEFROM  |   DATETO   |
+--------+------------+-------+------------+------------+
|     12 |         60 |    10 | 09/11/2011 | 10/11/2011 |
|     13 |         20 |    20 | 11/11/2011 | 11/11/2011 |
|     12 |          0 |     0 | 13/11/2011 | 14/11/2011 |
|     12 |         70 |    50 | 15/11/2011 | 26/11/2011 |
|     12 |         40 |    40 | 09/11/2011 | 09/11/2011 |
|     13 |         25 |    20 | 09/11/2011 | 09/11/2011 |
|     12 |          0 |     0 | 15/11/2011 | 19/11/2011 |
|     12 |         20 |    10 | 12/11/2011 | 12/11/2011 |
+--------+------------+-------+------------+------------+

Demo trên db <> fiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL / SQL:ORA-00904:định danh không hợp lệ &PL / SQL:Tuyên bố bị bỏ qua &PLS-00364:sử dụng biến chỉ mục vòng lặp không hợp lệ

  2. Bạn có thể sử dụng các tham số được đặt tên trong Laravel Eloquent không

  3. Cách tạo biến kiểu dữ liệu bản ghi do người dùng xác định trong cơ sở dữ liệu Oracle

  4. kết nối jdbc sử dụng trình điều khiển mỏng

  5. Oracle:Sự khác biệt giữa chuỗi NULL và EMPTY