sql >> Base de Datos >  >> RDS >> Sqlserver

Detectar intervalos de anomalías con SQL

Esta tiene que ser una de las preguntas más difíciles que he visto hoy. ¡Gracias! ¿Supongo que puedes usar CTE? Si es así, intente algo como esto:

;WITH Filtered
AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY dateField) RN, dateField, Status
    FROM Test    
)
SELECT F1.RN, F3.MinRN,
    F1.dateField StartDate,
    F2.dateField Enddate
FROM Filtered      F1, Filtered F2, (
SELECT F1a.RN, MIN(F3a.RN) as MinRN
FROM Filtered      F1a
   JOIN Filtered F2a ON F1a.RN = F2a.RN+1 AND F1a.Status = 2 AND F2a.Status <> 2
   JOIN Filtered F3a ON F1a.RN < F3a.RN AND F3a.Status <> 2
GROUP BY F1a.RN ) F3 
WHERE F1.RN = F3.RN AND F2.RN = F3.MinRN

Y el Violín . No agregué los intervalos, pero imagino que puedes manejar esa parte desde aquí.

Buena suerte.