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
Egzersiz talimatları
- Takvim yılının haftasını bul ve dahil et.
- Her grupta
c.Dateiçin en küçük değeriFirstDateOfWeekolarak ekle. Haftaya göre gruplayacağımız için bu yaklaşım çalışır. Calendartablosunu, takvim tablosundaki tarih ile her gün spa müşterisinin ziyaret tarihine göreDaySpaVisittablosuna birleştir.CustomerVisitStart, zamanı da içeren birDATETIME2olduğ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;