Tính trung bình trượt
Thay vì xem tổng tích lũy từ trước đến nay, ban lãnh đạo muốn thấy trung bình số sự cố trong 7 ngày gần nhất—tức là bắt đầu từ 6 ngày trước và kết thúc ở ngày hiện tại. Vì đây là một khung được chỉ định và thay đổi trong suốt quá trình truy vấn, nên nó được gọi là trung bình trượt.
SQL Server không hỗ trợ xét theo khoảng thời gian trong window function, nên chúng ta sẽ giả định mỗi ngày tương ứng một hàng và dùng mệnh đề ROWS.
Bài tập này là một phần của khóa học
Phân tích chuỗi thời gian trong SQL Server
Hướng dẫn bài tập
- Điền window function phù hợp để tính trung bình trượt bắt đầu từ 6 ngày trước đến hôm nay (hàng hiện tại).
- Điền khung cửa sổ, bao gồm mệnh đề
ROWS, phần "preceding" của khung và phần "following" của khung.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
SELECT
ir.IncidentDate,
ir.IncidentTypeID,
ir.NumberOfIncidents,
-- Fill in the correct window function
___(ir.NumberOfIncidents) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
-- Fill in the three parts of the window frame
___ BETWEEN ___ AND ___
) AS MeanNumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
WHERE
c.CalendarYear = 2019
AND c.CalendarMonth IN (7, 8)
AND ir.IncidentTypeID = 1
ORDER BY
ir.IncidentTypeID,
ir.IncidentDate;