SQL Oracle Counting Clusters

前端 未结 4 866
青春惊慌失措
青春惊慌失措 2020-12-20 23:44

I have a data set which is based on a timestamp.

     Date                 Value
07-Jul-15 12:05:00          1  
07-Jul-15 12:10:00          1 
07-Jul-15 12:         


        
4条回答
  •  眼角桃花
    2020-12-21 00:32

    Using LEAD and LAG functions in ORACLE you can built these queries:

    1.Number of shutdowns:

    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.Period Between every shut down

    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

提交回复
热议问题