Zacznij terazZacznij za darmo

Próbkowanie w dół przy użyciu tabeli kalendarza

Kierownictwo spodobał się raport tygodniowy, ale chciałoby zobaczyć każdy tydzień 2020 roku – nie tylko te, w których odnotowano korzystanie z udogodnień. Do rozwiązania tego problemu możemy użyć tabeli kalendarza: zawiera ona wszystkie tygodnie, dzięki czemu możemy połączyć ją z tabelą dbo.DaySpaVisit i uzyskać potrzebne dane.

Kierownictwo chciałoby również zobaczyć pierwszy dzień każdego tygodnia kalendarzowego, ponieważ zapewnia to ważny kontekst dla osób czytających raport.

To ćwiczenie jest częścią kursu

Analiza szeregów czasowych w SQL Server

Zobacz kurs

Instrukcje do ćwiczenia

  • Znajdź i uwzględnij tydzień roku kalendarzowego.
  • Dla każdej grupy uwzględnij minimalną wartość c.Date jako FirstDateOfWeek. Działa to poprawnie, ponieważ grupujemy dane według tygodnia.
  • Połącz tabelę Calendar z tabelą DaySpaVisit na podstawie daty z tabeli kalendarza i daty wizyty każdego klienta spa. CustomerVisitStart jest typu DATETIME2 i zawiera godzinę, dlatego bezpośrednie złączenie uwzględniałoby tylko wizyty rozpoczynające się dokładnie o północy.
  • Grupuj według tygodnia roku kalendarzowego.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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;
Edytuj i uruchom kod