,
CREATE TABLE MyTable
(
TimeSt INT,
SetPoint INT,
PV INT
)
INSERT INTO MyTable
VALUES (1, 100, 122),
(2, 100, 95),
(3, 100, 98),
(4, 100, 88),
(5, 100, 105),
(6, 100, 59),
(7, 100, 90),
(8, 100, 101),
(9, 100, 70),
(10, 100, 101);
WITH CTE
AS (SELECT
*
,lag(TimeSt, 1) OVER(ORDER BY TimeSt) AS LagTimeSt
,lag(SetPoint, 1) OVER(ORDER BY TimeSt) AS LagSetPoint
,lag(PV, 1) OVER(ORDER BY TimeSt) AS LagPV
FROM
MyTable),
CTE2
AS (SELECT
*
,CASE
WHEN (PV < SetPoint AND LagPV > LagSetPoint)
THEN 1 ELSE 0 END AS FirstDrop
FROM
CTE
WHERE
(PV < SetPoint AND LagPV > LagSetPoint)
OR (PV > SetPoint AND LagPV < LagSetPoint)),
CTE3
AS (SELECT
Lead(timest) OVER(ORDER BY TimeSt) UpTime
,*
FROM
CTE2)
SELECT
sum(firstDrop) AS Occur
,sum(uptime - Timest) AS DownTime
FROM
CTE3
Where FirstDrop = 1