sql >> データベース >  >> RDS >> Oracle

行間の違いを考慮した行のグループ化

    分析でサブクエリを使用して、連続する範囲を識別してグループ化します:

    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. where句のmySQL正規表現

    2. PentahoCEダッシュボードのMySQLクエリパラメータ

    3. 大規模なMySQLデータセットで部分的な単語を検索するための最良の方法

    4. 英数字と空白を含むレコードを取得する方法