EmpezarEmpieza gratis

Muestreo a la baja usando una tabla de calendario

A Dirección le gustó el informe semanal, pero quiere ver todas las semanas de 2020, no solo aquellas con uso de amenities. Podemos usar una tabla de calendario para resolverlo: la tabla de calendario incluye todas las semanas, así que podemos unirla con la tabla dbo.DaySpaVisit para obtener las respuestas.

Además, también quieren ver el primer día de cada semana del calendario, ya que aporta un contexto importante para quienes consultan el informe.

Este ejercicio forma parte del curso

Análisis de series temporales en SQL Server

Ver curso

Instrucciones del ejercicio

  • Busca e incluye la semana del año del calendario.
  • Incluye el valor mínimo de c.Date en cada grupo como FirstDateOfWeek. Esto funciona porque estamos agrupando por semana.
  • Une la tabla Calendar con la tabla DaySpaVisit basándote en la fecha de la tabla de calendario y la fecha de visita de cada cliente del spa de día. CustomerVisitStart es un DATETIME2 que incluye la hora, por lo que una unión directa solo incluiría visitas que comiencen exactamente a medianoche.
  • Agrupa por la semana del año del calendario.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

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;
Editar y ejecutar código