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

Oracle - Ubah nilai dari baris menjadi rentang

Saya merasa ini mungkin dapat diperbaiki, tetapi berhasil:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kueri beberapa NEXTVAL dari urutan dalam satu pernyataan

  2. Penyedia Oracle Entity Framework tidak menyimpan DateTime.Now dengan milidetik

  3. Fungsi Seribu Pemisah di oracle?

  4. ORA-00900:kesalahan pernyataan SQL tidak valid? Apa yang salah dengan sql saya?

  5. cara mengonversi string tanggal ke format tanggal di oracle10g