ÎncepețiÎncepe gratuit

Vizualizarea celor trei perioade anterioare

Funcțiile de fereastră LAG() și LEAD() ne permit să privim înapoi, respectiv înainte în timp. Astfel, putem compara datele de la o perioadă la alta într-o singură interogare simplă. Fiecare apel al funcției LAG() sau LEAD() returnează fie NULL, fie un singur rând. Dacă vrei să vizualizezi mai multe perioade anterioare, poți include mai multe apeluri ale funcțiilor LAG() sau LEAD().

În acest exercițiu, vrem să comparăm numărul de incidente de securitate pe zi pentru tipurile de incidente 1 și 2 în iulie 2019, mai precis perioada cuprinsă între 2 și 31 iulie. Managementul dorește să vadă o fereastră glisantă de patru zile, pe tip de incident, pentru a identifica eventuale tendințe semnificative – pornind cu două zile în urmă și extinzându-se cu o zi înainte.

Acest exercițiu face parte din cursul

Analiza seriilor de timp în SQL Server

Vezi cursul

Instrucțiuni pentru exercițiu

  • Completează codul SQL pentru a returna numărul de incidente de acum două perioade.
  • Completează codul SQL pentru a returna numărul de incidente din perioada anterioară.
  • Completează codul SQL pentru a returna numărul de incidente din perioada următoare.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

SELECT
	ir.IncidentDate,
	ir.IncidentTypeID,
    -- Fill in two periods ago
	___(ir.___, ___) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	) AS Trailing2Day,
    -- Fill in one period ago
	___(ir.___, ___) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	) AS Trailing1Day,
	ir.NumberOfIncidents AS CurrentDayIncidents,
    -- Fill in next period
	___(ir.___, ___) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	) AS NextDay
FROM dbo.IncidentRollup ir
WHERE
	ir.IncidentDate >= '2019-07-01'
	AND ir.IncidentDate <= '2019-07-31'
	AND ir.IncidentTypeID IN (1, 2)
ORDER BY
	ir.IncidentTypeID,
	ir.IncidentDate;
Editează și rulează codul