Calculando dias decorridos entre incidentes
Algo que você pode ter notado nos dois exercícios anteriores é que nem sempre temos incidentes em todos os dias da semana, então chamar LAG() e LEAD() de “dia anterior” é um pouco enganoso; na verdade, é o “período anterior”. A gestão também percebeu isso e, no fim de julho, queria saber o número de dias entre os incidentes. Para fazer isso, vamos calcular dois valores: o número de dias desde o incidente anterior e o número de dias até o próximo incidente.
Lembre que DATEDIFF() fornece a diferença entre duas datas. Podemos combinar isso com LAG() e LEAD() para obter nossos resultados.
Este exercício faz parte do curso
Análise de Séries Temporais no SQL Server
Instruções do exercício
- Calcule os dias desde o último incidente usando uma combinação de
DATEDIFF()eLAG()ouLEAD(). - Calcule os dias até o próximo incidente usando uma combinação de
DATEDIFF()eLAG()ouLEAD(). - OBSERVAÇÃO: você não precisará usar a coluna
NumberOfIncidentsneste exercício.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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;