कैलेंडर टेबल का उपयोग करके डाउनसैंपल करें
मैनेजमेंट को साप्ताहिक रिपोर्ट पसंद आई, लेकिन वे 2020 के हर सप्ताह को देखना चाहते थे, न कि केवल वे सप्ताह जिनमें amenity usage था। हम इसे कैलेंडर टेबल से सुलझा सकते हैं: कैलेंडर टेबल में सभी सप्ताह शामिल होते हैं, इसलिए हम इसे dbo.DaySpaVisit टेबल के साथ जोड़कर अपना उत्तर पा सकते हैं।
मैनेजमेंट यह भी देखना चाहते हैं कि प्रत्येक कैलेंडर सप्ताह का पहला दिन कौन सा है, क्योंकि यह रिपोर्ट देखने वालों के लिए महत्त्वपूर्ण संदर्भ देता है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
SQL Server में Time Series Analysis
अभ्यास निर्देश
- कैलेंडर वर्ष के सप्ताह को खोजें और शामिल करें.
- प्रत्येक समूह में
c.Dateका न्यूनतम मानFirstDateOfWeekके रूप में शामिल करें। यह इसलिए काम करता है क्योंकि हम सप्ताह के आधार पर group कर रहे हैं. - कैलेंडर टेबल की date और प्रत्येक day spa ग्राहक के visit की date के आधार पर
Calendarटेबल कोDaySpaVisitटेबल से जोड़ें।CustomerVisitStartएकDATETIME2है जिसमें समय भी शामिल है, इसलिए direct join केवल वही visits शामिल करेगा जो ठीक आधी रात को शुरू हुए हों. - कैलेंडर वर्ष के सप्ताह के आधार पर group करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
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;