Inizia subitoInizia gratis

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

Visualizza corso

Istruzioni dell'esercizio

  • Trova e includi la settimana dell'anno del calendario.
  • Includi il valore minimo di c.Date in ogni gruppo come FirstDateOfWeek. Funziona perché stiamo raggruppando per settimana.
  • Esegui una JOIN tra la tabella Calendar e la tabella DaySpaVisit basata sulla data della tabella calendario e sulla data di visita di ciascun cliente del day spa. CustomerVisitStart è un DATETIME2 che 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;
Modifica ed esegui il codice