Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle — Konwertuj wartość z wierszy na zakresy

Wydaje mi się, że można to poprawić, ale działa:

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. Czy ograniczenie sprawdzające może odnosić się do innej tabeli? Wyrocznia

  2. Oracle:Czy klient Oracle 10g współpracuje z serwerem 11g?

  3. Zapytanie w Oracle do wybrania za pomocą podzapytania

  4. Jak kontrolować aktywność bazy danych bez problemów z wydajnością i skalowalnością?

  5. Czy dostawca OraOLEDB w .NET jest niewiarygodny w polach CLOB?