BaşlayınÜcretsiz başlayın

Takvim tablosu kullanarak aşağı örnekleme (downsampling)

Yönetim haftalık raporu beğendi ama sadece olanak kullanımı (amenity usage) olan haftaları değil, 2020'deki HER haftayı görmek istiyor. Bu sorunu çözmek için bir takvim tablosu kullanabiliriz: takvim tablosu tüm haftaları içerir, böylece cevaplarımızı bulmak için dbo.DaySpaVisit tablosuyla birleştirebiliriz.

Yönetim ayrıca her takvim haftasının ilk gününü de görmek istiyor; bu, raporu görüntüleyenlere önemli bir bağlam sağlar.

Bu egzersiz, kursun bir parçasıdır

SQL Server'da Zaman Serisi Analizi

Kursa Göz Atın

Egzersiz talimatları

  • Takvim yılının haftasını bul ve dahil et.
  • Her grupta c.Date için en küçük değeri FirstDateOfWeek olarak ekle. Haftaya göre gruplayacağımız için bu yaklaşım çalışır.
  • Calendar tablosunu, takvim tablosundaki tarih ile her gün spa müşterisinin ziyaret tarihine göre DaySpaVisit tablosuna birleştir. CustomerVisitStart, zamanı da içeren bir DATETIME2 olduğundan, doğrudan birleştirme yalnızca tam gece yarısında başlayan ziyaretleri içerir.
  • Takvim yılının haftasına göre grupla.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

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;
Kodu Düzenle ve Çalıştır