CommencezCommencez gratuitement

Sous-échantillonner à l'aide d'une table calendrier

La direction a aimé le rapport hebdomadaire, mais elle souhaite voir toutes les semaines de 2020, pas seulement celles où il y a eu utilisation d'un service. Nous pouvons utiliser une table calendrier pour régler ce problème : la table calendrier inclut toutes les semaines, nous pouvons donc la joindre à la table dbo.DaySpaVisit pour obtenir nos résultats.

La direction aimerait aussi voir le premier jour de chaque semaine civile, car cela donne un contexte important aux personnes qui consultent le rapport.

Cette activité fait partie du cours

Analyse de séries chronologiques dans SQL Server

Voir le cours

Instructions de l’exercice

  • Repérez et incluez la semaine de l'année civile.
  • Incluez la valeur minimale de c.Date dans chaque groupe sous le nom FirstDateOfWeek. Cela fonctionne parce que nous regroupons par semaine.
  • Joignez la table Calendar à la table DaySpaVisit en fonction de la date de la table calendrier et de la date de visite de chaque client du spa de jour. CustomerVisitStart est un DATETIME2 qui inclut l'heure, donc une jointure directe n'inclurait que les visites commençant exactement à minuit.
  • Regroupez par la semaine de l'année civile.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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;
Modifier et exécuter le code