Downsample menggunakan tabel kalender
Manajemen menyukai laporan mingguan tersebut, tetapi mereka ingin melihat setiap minggu di tahun 2020, bukan hanya minggu-minggu dengan penggunaan fasilitas. Kita dapat menggunakan tabel kalender untuk menyelesaikan masalah ini: tabel kalender mencakup semua minggu, sehingga kita dapat menggabungkannya dengan tabel dbo.DaySpaVisit untuk menemukan jawabannya.
Manajemen juga ingin melihat hari pertama setiap minggu kalender, karena itu memberikan konteks penting bagi pembaca laporan.
Latihan ini merupakan bagian dari kursus
Analisis Deret Waktu di SQL Server
Instruksi latihan
- Temukan dan sertakan minggu dalam tahun kalender.
- Sertakan nilai minimum
c.Datedi setiap grup sebagaiFirstDateOfWeek. Ini berhasil karena kita mengelompokkan berdasarkan minggu. - Gabungkan tabel
Calendardengan tabelDaySpaVisitberdasarkan tanggal pada tabel kalender dan tanggal kunjungan setiap pelanggan spa harian.CustomerVisitStartadalahDATETIME2yang menyertakan waktu, sehingga penggabungan langsung hanya akan menyertakan kunjungan yang dimulai tepat pada tengah malam. - Kelompokkan berdasarkan minggu dalam tahun kalender.
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
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;