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

Oracle-値を行から範囲に変換する

    これはおそらく改善できると思いますが、機能します:

    WITH base AS  (
        SELECT  1 N FROM DUAL UNION ALL
        SELECT  2 N FROM DUAL UNION ALL
        SELECT  3 N FROM DUAL UNION ALL
        SELECT  6 N FROM DUAL UNION ALL
        SELECT  7 N FROM DUAL UNION ALL
        SELECT 17 N FROM DUAL UNION ALL
        SELECT 18 N FROM DUAL UNION ALL
        SELECT 19 N FROM DUAL UNION ALL
        SELECT 21 N FROM DUAL
    )
    , lagged AS
    (
        SELECT n, LAG(n) OVER (ORDER BY n) lag_n FROM base
    )
    , groups AS
    (
        SELECT n, row_number() OVER (ORDER BY n) groupnum
          FROM lagged
          WHERE lag_n IS NULL OR lag_n < n-1
    )
    , grouped AS
    (
        SELECT n, (SELECT MAX(groupnum) FROM groups
                     WHERE groups.n <= base.n
                  ) groupnum
          FROM base
    )
    SELECT groupnum, MIN(n), MAX(n)
      FROM grouped
      GROUP BY groupnum
      ORDER BY groupnum
    


    1. プログラムを実行するためにcrontabを使用してデータベースに英語以外の文字を挿入できない

    2. キーがkey2のサブストリングであるMySQLで結合するにはどうすればよいですか?

    3. MySQLテーブルを更新し、重複するエントリを無視します

    4. MySQLエイリアスの省略形?