Calcular los días transcurridos entre incidentes
Algo que quizá notaste en los dos ejercicios anteriores es que no siempre hay incidentes todos los días de la semana, así que llamar a LAG() y LEAD() el "día anterior" es un poco engañoso; en realidad es el "periodo anterior". En dirección también se dieron cuenta y, a finales de julio, quisieron saber el número de días entre incidentes. Para hacerlo, calcularemos dos valores: el número de días desde el incidente anterior y el número de días hasta el siguiente incidente.
Recuerda que DATEDIFF() devuelve la diferencia entre dos fechas. Podemos combinarlo con LAG() y LEAD() para obtener nuestros resultados.
Este ejercicio forma parte del curso
Análisis de series temporales en SQL Server
Instrucciones del ejercicio
- Calcula los días desde el último incidente usando una combinación de
DATEDIFF()yLAG()oLEAD(). - Calcula los días hasta el siguiente incidente usando una combinación de
DATEDIFF()yLAG()oLEAD(). - NOTA: no necesitarás usar la columna
NumberOfIncidentsen este ejercicio.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
SELECT
ir.IncidentDate,
ir.IncidentTypeID,
-- Fill in the days since last incident
___(DAY, ___(ir.IncidentDate, 1) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
), ir.___) AS DaysSinceLastIncident,
-- Fill in the days until next incident
___(DAY, ir.___, ___(ir.IncidentDate, 1) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
)) AS DaysUntilNextIncident
FROM dbo.IncidentRollup ir
WHERE
ir.IncidentDate >= '2019-07-02'
AND ir.IncidentDate <= '2019-07-31'
AND ir.IncidentTypeID IN (1, 2)
ORDER BY
ir.IncidentTypeID,
ir.IncidentDate;