Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pengelompokan baris dengan mempertimbangkan perbedaan antar baris

Saya menggunakan subkueri dengan analitik untuk mengidentifikasi dan mengelompokkan rentang yang berdekatan:

SQL> WITH test_data AS (
  2    SELECT  0 s, 2 dur FROM dual UNION ALL   --# ■■
  3    SELECT  2  , 2     FROM dual UNION ALL   --#   ■■
  4    SELECT 10  , 1     FROM dual UNION ALL   --#           ■
  5    SELECT 13  , 4     FROM dual UNION ALL   --#              ■■■■
  6    SELECT 15  , 4     FROM dual             --#                ■■■■
  7  )
  8  SELECT MIN(s) "begin", MAX(s + dur) "end"
  9    FROM (SELECT s, dur, SUM(gap) over(ORDER BY s) my_group
 10             FROM (SELECT s, dur,
 11                           CASE
 12                              WHEN lag(s + dur) over(ORDER BY s) >= s - 5 THEN
 13                               0
 14                              ELSE
 15                               1
 16                           END gap
 17                      FROM test_data
 18                     ORDER BY s))
 19   GROUP BY my_group;

     begin        end
---------- ----------
         0          4
        10         19


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle setara dengan Java's Varargs

  2. membandingkan tanggal dengan format yang telah ditentukan pl sql

  3. Bagaimana cara mengatur wilayah zona waktu untuk Koneksi JDBC dan menghindari wilayah zona waktu SqlException tidak ditemukan?

  4. Dari XML ke daftar jalur di Oracle 12c

  5. SQL - Membuat asosiasi antar bidang (Hubungan transitif)