sql >> Database >  >> RDS >> Oracle

Oracle - Converteer waarde van rijen naar bereiken

Ik heb het gevoel dat dit waarschijnlijk verbeterd kan worden, maar het werkt:

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. MYSQL-query voor het selecteren van het resultaat van een voorwaarde van een tabel en weergeven in een andere tabel

  2. Hoe SQL-query direct in C# uit te voeren?

  3. Dynamische ORDER BY en ASC / DESC in een plpgsql-functie

  4. OLE DB-provider Microsoft.ACE.OLEDB.12.0 voor gekoppelde server (null) geretourneerd bericht Bladwijzer is ongeldig.