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
Pokyny k cvičení
- Najdi a zahrň číslo týdne v kalendářním roce.
- Přidej minimální hodnotu
c.Datev každé skupině jakoFirstDateOfWeek. Funguje to proto, že seskupuješ právě podle týdne. - Připoj tabulku
Calendark tabulceDaySpaVisitna základě data v kalendářní tabulce a data návštěvy každého zákazníka day spa.CustomerVisitStartje datový typDATETIME2, 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;