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

Klastry zliczające SQL Oracle

Korzystając z funkcji LEAD i LAG w ORACLE, możesz zbudować następujące zapytania:

1. Liczba wyłączeń:

WITH IntTable AS
( SELECT * FROM
  (
   SELECT dt b_date,value,LEAD(dt) OVER (ORDER BY dt) e_date  FROM
     (
        select "Date" dt,"Value" value,
               LAG("Value") OVER (ORDER BY "Date") pvalue,
               LEAD("Value") OVER (ORDER BY "Date") nvalue
        from T
     ) T1
     WHERE pvalue is NULL or value<>pvalue or nvalue is NULL 
   )
WHERE E_DATE is NOT NULL
)
SELECT COUNT(*) FROM IntTable where value = 0 

Demo SQLFiddle

2. Okres między każdym wyłączeniem

WITH IntTable AS
( SELECT * FROM
  (
   SELECT dt b_date,value,LEAD(dt) OVER (ORDER BY dt) e_date  FROM
     (
        select "Date" dt,"Value" value,
               LAG("Value") OVER (ORDER BY "Date") pvalue,
               LEAD("Value") OVER (ORDER BY "Date") nvalue
        from T
     ) T1
     WHERE pvalue is NULL or value<>pvalue or nvalue is NULL 
   )
WHERE E_DATE is NOT NULL
)
SELECT b_date,e_date, (e_date-b_date) * 60 * 24 FROM IntTable where value = 1 

Demo SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj liczbę dni między dwiema datami w Oracle, łącznie z datami

  2. Połączenie zawiesza się po czasie bezczynności

  3. Pytania do rozmowy kwalifikacyjnej Oracle

  4. Jak formatować liczby ujemne za pomocą nawiasów kątowych w Oracle

  5. Nieistotna różnica planu wykonania z Oracle przy użyciu jdbc Timestamp lub Date