Đây là SQL Fiddle điều đó thể hiện truy vấn sau:
WITH TempS as
(
SELECT s.SNo, s.value,
ROW_NUMBER() OVER (ORDER BY s.SNo) AS RowNumber
FROM MyTable AS s
)
SELECT m.SNo, m.value,
(
SELECT SUM(s.value)
FROM TempS AS s
WHERE RowNumber >= m.RowNumber
AND RowNumber <= m.RowNumber + 2
) AS Sum3InRow
FROM TempS AS m
Trong câu hỏi của bạn, bạn đã yêu cầu tính tổng 3 giá trị liên tiếp. Bạn đã sửa đổi câu hỏi của mình cho biết số lượng bản ghi liên tiếp bạn cần tính tổng có thể thay đổi. Trong truy vấn trên, bạn chỉ cần thay đổi m.RowNumber + 2
với những gì bạn cần.
Vì vậy, nếu bạn cần 60, thì hãy sử dụng
m.RowNumber + 59
Như bạn có thể thấy, nó rất linh hoạt vì bạn chỉ phải thay đổi một số.