sql >> Databasteknik >  >> RDS >> Oracle

Gruppera rader med tanke på skillnaden mellan raderna

Jag använder underfrågor med analys för att identifiera och gruppera sammanhängande intervall:

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. Hur man skapar en dynamisk PHP-växlingssats från MySQL-fråga

  2. python + psycopg2 =okända typer?

  3. uppdatering av primärnyckel kontra radering av primärnyckel + infogning

  4. bulkuppsamling ...för all användning