Kom igångKom igång gratis

Nedsampla med hjälp av en kalendertabell

Ledningen uppskattade veckorapporten men ville se samtliga veckor under 2020, inte bara de veckor då bekvämligheter användes. Vi kan lösa det här med en kalendertabell: kalendertabellen innehåller alla veckor, så vi kan joina den med tabellen dbo.DaySpaVisit för att hitta svaren.

Ledningen vill också se den första dagen i varje kalendervecka, eftersom det ger viktig kontext för rapportens läsare.

Den här övningen är en del av kursen

Tidsserieanalys i SQL Server

Visa kurs

Övningsinstruktioner

  • Hitta och inkludera veckans nummer i kalenderåret.
  • Inkludera det minsta värdet av c.Date i varje grupp som FirstDateOfWeek. Det här fungerar eftersom vi grupperar efter vecka.
  • Joina tabellen Calendar med tabellen DaySpaVisit baserat på kalendertabellens datum och varje dagsspabesökares besöksdatum. CustomerVisitStart är av typen DATETIME2 och innehåller tid, vilket innebär att en direkt join bara inkluderar besök som startar exakt vid midnatt.
  • Gruppera efter kalenderveckans nummer.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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;
Redigera och kör kod