Como comparo a diferença de timestamp entre 2 registros consecutivos?
Este é o meu exemplo:
DECLARE @x TABLE(ProductID INT, SingleRunFailure bit, SampleDate date);
INSERT @x VALUES
(101, 1, '2016-01-01 10:09:19.617'),
(101, 0, '2016-01-05 11:09:19.617'),
(101, 1, '2016-01-07 12:09:19.617'),
(101, 0, '2016-01-09 12:09:19.617'),
(101, 1, '2016-01-15 13:09:19.617'),
(101, 0, '2016-01-17 13:09:19.617'),
(101, 0, '2016-01-29 14:09:19.617'),
(101, 0, '2016-02-02 15:09:19.617');
;WITH cte(ProductID, CCVPassed)
AS
(
SELECT ProductID, CASE WHEN SUM(LastTwoRunsPass) >= 2 THEN 1 ELSE 0 END
FROM (SELECT ProductID, LastTwoRunsPass = CASE WHEN SingleRunFailure = 0 THEN 1 ELSE 0 END,
RowNumber = ROW_NUMBER() OVER(PARTITION BY ProductID ORDER BY SampleDate DESC)
FROM @x) AS aggregation
WHERE RowNumber <= 2
GROUP BY ProductID
)
SELECT * FROM cte;
Isso me retorna um Pass ou Fail onde o sinalizador SingleRunFailure era falso nos últimos 2 registros. Esta parte funciona como esperado.
Preciso adicionar uma lógica onde, se a diferença SampleDate nos últimos 2 registros for menor que 15 minutos, retorne True.
Resposta esperada:
ProductID CCVPassed
101 0
Isso ocorre porque a diferença entre os últimos 2 registros é de 4 dias. Se a diferença SampleDate entre os 2 últimos registros for menor que 15 minutos, CCVPassed retornará 1.
Isso funciona assim:
ProductID
ordenado porSampleDate
( ROW_NUMBER() ).SampleDate
que são as 2 últimas linhas da amostra)SampleDate
Consulta:
SQL Fiddle
Resultado:
Observação:
ProductId
porque supôs que você tem váriosProductId
em sua tabela real.