Rééchantillonner à la baisse avec une table de calendrier
La direction a apprécié le rapport hebdomadaire, mais souhaite voir toutes les semaines de 2020, pas seulement celles avec une utilisation des équipements. Nous pouvons résoudre ce problème avec une table de calendrier : elle inclut toutes les semaines, ce qui nous permet de la joindre à la table dbo.DaySpaVisit pour trouver nos réponses.
La direction souhaite également voir le premier jour de chaque semaine du calendrier, car cela apporte un contexte important aux lecteurs du rapport.
Cet exercice fait partie du cours
<cours>Analyse de séries temporelles dans SQL Server</cours>Instructions de l’exercice
- Recherchez et incluez la semaine de l’année civile.
- Incluez la valeur minimale de
c.Datedans chaque groupe sous le nomFirstDateOfWeek. Cela fonctionne parce que nous regroupons par semaine. - Faites une jointure entre la table
Calendaret la tableDaySpaVisiten vous basant sur la date de la table de calendrier et la date de visite de chaque client du spa de jour.CustomerVisitStartest unDATETIME2qui inclut l’heure ; une jointure directe n’inclurait donc 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;