sql >> Database >  >> RDS >> Oracle

SQL Oracle-telclusters

Met behulp van de LEAD- en LAG-functies in ORACLE kunt u deze query's maken:

1.Aantal uitschakelingen:

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 

SQLFiddle-demo

2.Periode tussen elke afsluiting

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 

SQLFiddle-demo



  1. SQL NVARCHAR- en VARCHAR-limieten

  2. Slaapstandprobleem met Oracle Trigger voor het genereren van id uit een reeks

  3. Het gelijktijdige verzoek afhandelen terwijl u in de Oracle-database blijft?

  4. Zoek uit of een object een tabelwaarde-functie is in SQL Server met OBJECTPROPERTY()