Downsampling mit einer Kalendertabelle
Das Management mochte den Wochenbericht, möchte aber jede Woche in 2020 sehen, nicht nur die Wochen mit Nutzung der Amenities. Wir können dieses Problem mit einer Kalendertabelle lösen: Die Kalendertabelle enthält alle Wochen, daher können wir sie mit der Tabelle dbo.DaySpaVisit verknüpfen, um unsere Antworten zu finden.
Außerdem möchte das Management den ersten Tag jeder Kalenderwoche sehen, da das den Berichtsempfängerinnen und -empfängern wichtigen Kontext bietet.
Diese Übung ist Teil des Kurses
Zeitreihenanalyse in SQL Server
Anleitung zur Übung
- Ermittle und gib die Kalenderwoche des Jahres aus.
- Nimm den Minimalwert von
c.Datein jeder Gruppe alsFirstDateOfWeekauf. Das funktioniert, weil wir nach Woche gruppieren. - Verknüpfe die Tabelle
Calendarmit der TabelleDaySpaVisitbasierend auf dem Datum der Kalendertabelle und dem Besuchsdatum der Day-Spa-Kundinnen und -kunden.CustomerVisitStartist einDATETIME2mit Uhrzeit, daher würde eine direkte Verknüpfung nur Besuche genau um Mitternacht enthalten. - Gruppiere nach der Kalenderwoche des Jahres.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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;