Začněte nyníZačněte zdarma

Downsample pomocí kalendářní tabulky

Vedení ocenilo týdenní přehled, ale chtělo vidět každý týden roku 2020 – nejen ty, ve kterých docházelo k využívání vybavení. Tento problém lze vyřešit pomocí kalendářní tabulky: ta obsahuje všechny týdny, takže ji můžeme napojit na tabulku dbo.DaySpaVisit a získat potřebné výsledky.

Vedení by také rádo vidělo první den každého kalendářního týdne, protože to poskytuje důležitý kontext pro čtenáře přehledu.

Toto cvičení je součástí kurzu

Time Series Analysis in SQL Server

Zobrazit kurz

Pokyny k cvičení

  • Najdi a zahrň číslo týdne v kalendářním roce.
  • Přidej minimální hodnotu c.Date v každé skupině jako FirstDateOfWeek. Funguje to proto, že seskupuješ právě podle týdne.
  • Připoj tabulku Calendar k tabulce DaySpaVisit na základě data v kalendářní tabulce a data návštěvy každého zákazníka day spa. CustomerVisitStart je datový typ DATETIME2, který obsahuje i čas, takže přímé spojení by zahrnovalo pouze návštěvy začínající přesně o půlnoci.
  • Seskup záznamy podle týdne kalendářního roku.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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;
Upravit a spustit kód