НачатьНачать бесплатно

Агрегирование данных до дневного уровня

Свёртка данных до более крупного уровня детализации — распространённая аналитическая задача. Нередко данные хранятся с точными метками времени, однако нужно получить агрегированные результаты. В SQL Server для этого есть несколько подходов в зависимости от желаемого уровня детализации.

В этих упражнениях мы рассмотрим пример вымышленного спа-салона. Руководство салона рассылало купоны потенциальным новым клиентам в период с 16 по 20 июня 2020 года и хотело бы понять, привела ли эта кампания к росту новых визитов.

В данном упражнении мы разберём одну из простейших техник агрегирования: преобразование типа данных DATETIME2 или DATETIME в тип данных, содержащий только дату без временно́й составляющей, — тип DATE.

Это упражнение является частью курса

Анализ временных рядов в SQL Server

Посмотреть курс

Инструкции к упражнению

  • Агрегируйте время начала визитов клиентов до дневного уровня детализации и подведите итоги.
  • Добавьте в предложение GROUP BY все неагрегированные значения из предложения SELECT (без псевдонимов, таких как AS Day).

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

SELECT
	-- Downsample to a daily grain
    -- Cast CustomerVisitStart as a date
	___(dsv.CustomerVisitStart AS ___) AS Day,
	SUM(dsv.AmenityUseInMinutes) AS AmenityUseInMinutes,
	COUNT(1) AS NumberOfAttendees
FROM dbo.DaySpaVisit dsv
WHERE
	dsv.CustomerVisitStart >= '2020-06-11'
	AND dsv.CustomerVisitStart < '2020-06-23'
GROUP BY
	-- When we use aggregation functions like SUM or COUNT,
    -- we need to GROUP BY the non-aggregated columns
	___(dsv.CustomerVisitStart AS ___)
ORDER BY
	Day;
Редактировать и запускать код