시작하기무료로 시작하기

캘린더 테이블을 사용해 다운샘플링하기

경영진은 주간 보고서를 마음에 들어 했지만, 편의 시설 사용이 있었던 주만이 아니라 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;
코드 편집 및 실행