Effettua il downsampling usando una tabella calendario
Il management ha apprezzato il report settimanale, ma vuole vedere tutte le settimane del 2020, non solo quelle con utilizzo dei servizi. Possiamo risolvere con una tabella calendario: la tabella calendario include tutte le settimane, quindi possiamo unirla alla tabella dbo.DaySpaVisit per trovare le risposte.
Il management vuole anche vedere il primo giorno di ogni settimana del calendario, perché fornisce un contesto importante a chi legge il report.
Questo esercizio fa parte del corso
Analisi delle serie temporali in SQL Server
Istruzioni dell'esercizio
- Trova e includi la settimana dell'anno del calendario.
- Includi il valore minimo di
c.Datein ogni gruppo comeFirstDateOfWeek. Funziona perché stiamo raggruppando per settimana. - Esegui una JOIN tra la tabella
Calendare la tabellaDaySpaVisitbasata sulla data della tabella calendario e sulla data di visita di ciascun cliente del day spa.CustomerVisitStartè unDATETIME2che include l'ora, quindi una JOIN diretta includerebbe solo le visite iniziate esattamente a mezzanotte. - Raggruppa per la settimana dell'anno del calendario.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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;