ÎncepețiÎncepe gratuit

Reducerea eșantionării folosind un tabel calendar

Conducerii i-a plăcut raportul săptămânal, dar dorește să vadă fiecare săptămână din 2020, nu doar săptămânile în care au fost utilizate facilitățile. Putem rezolva această problemă cu ajutorul unui tabel calendar: acesta include toate săptămânile, astfel încât îl putem uni cu tabelul dbo.DaySpaVisit pentru a găsi răspunsurile dorite.

Conducerea ar dori, de asemenea, să vadă prima zi a fiecărei săptămâni calendaristice, deoarece aceasta oferă un context important pentru cei care consultă raportul.

Acest exercițiu face parte din cursul

Analiza seriilor de timp în SQL Server

Vezi cursul

Instrucțiuni pentru exercițiu

  • Găsește și include săptămâna din anul calendaristic.
  • Include valoarea minimă a c.Date din fiecare grup sub denumirea FirstDateOfWeek. Aceasta funcționează deoarece grupăm datele pe săptămâni.
  • Unește tabelul Calendar cu tabelul DaySpaVisit pe baza datei din tabelul calendar și a datei vizitei fiecărui client al centrului spa. CustomerVisitStart este de tip DATETIME2, care include și ora, astfel că o unire directă ar include doar vizitele care încep exact la miezul nopții.
  • Grupează după săptămâna din anul calendaristic.

Exercițiu interactiv practic

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

SELECT
	-- Determine the week of the calendar year
	c.___,
	-- Determine the earliest DATE in this group
    -- This is NOT the DayOfWeek column
	MIN(c.___) AS FirstDateOfWeek,
	ISNULL(SUM(dsv.AmenityUseInMinutes), 0) AS AmenityUseInMinutes,
	ISNULL(MAX(dsv.CustomerID), 0) AS HighestCustomerID,
	COUNT(dsv.CustomerID) AS NumberOfAttendees
FROM dbo.Calendar c
	LEFT OUTER JOIN dbo.DaySpaVisit dsv
		-- Connect dbo.Calendar with dbo.DaySpaVisit
		-- To join on CustomerVisitStart, we need to turn 
        -- it into a DATE type
		ON c.Date = CAST(dsv.___ AS ___)
WHERE
	c.CalendarYear = 2020
GROUP BY
	-- When we use aggregation functions like SUM or COUNT,
    -- we need to GROUP BY the non-aggregated columns
	c.___
ORDER BY
	c.CalendarWeekOfYear;
Editează și rulează codul