ПочатиПочніть безкоштовно

Зменшення частоти вибірки за допомогою календарної таблиці

Керівництву сподобався щотижневий звіт, але вони хочуть бачити всі тижні 2020 року, а не лише ті, де був використаний сервіс. Ми можемо розв'язати це за допомогою календарної таблиці: вона містить усі тижні, тож ми можемо приєднати її до таблиці dbo.DaySpaVisit, щоб отримати відповіді.

Керівництво також хоче бачити перший день кожного календарного тижня, адже це дає важливий контекст для тих, хто переглядає звіт.

Ця вправа є частиною курсу

Аналіз часових рядів у SQL Server

Переглянути курс

Інструкції до вправи

  • Знайдіть і включіть номер тижня календарного року.
  • Додайте мінімальне значення c.Date у кожній групі як FirstDateOfWeek. Це працює, оскільки ми групуємо за тижнем.
  • Приєднайте таблицю Calendar до таблиці DaySpaVisit на основі дати з календарної таблиці та дати відвідування кожного клієнта. CustomerVisitStart має тип DATETIME2 і містить час, тому пряме з'єднання включить лише відвідування, що почалися рівно опівночі.
  • Виконайте групування за номером тижня календарного року.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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;
Редагувати та запускати код