LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Ermittle und gib die Kalenderwoche des Jahres aus.
  • Nimm den Minimalwert von c.Date in jeder Gruppe als FirstDateOfWeek auf. Das funktioniert, weil wir nach Woche gruppieren.
  • Verknüpfe die Tabelle Calendar mit der Tabelle DaySpaVisit basierend auf dem Datum der Kalendertabelle und dem Besuchsdatum der Day-Spa-Kundinnen und -kunden. CustomerVisitStart ist ein DATETIME2 mit 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;
Code bearbeiten und ausführen