Một thay thế khả thi sẽ là
WITH T AS
(
SELECT
Value * POWER(5E-1, ROW_NUMBER()
OVER (ORDER BY Row DESC)
/* first row decays less so special cased */
-IIF(LEAD(Value) OVER (ORDER BY Row DESC) IS NULL,1,0))
as x
FROM Sample
)
SELECT SUM(x)
FROM T
Hoặc đối với câu hỏi cập nhật, sử dụng 60% / 40%
WITH T AS
(
SELECT IIF(LEAD(Value) OVER (ORDER BY Row DESC) IS NULL, 1,0.6)
* Value
* POWER(4E-1, ROW_NUMBER() OVER (ORDER BY Row DESC) -1)
as x
FROM Sample
)
SELECT SUM(x)
FROM T
cả hai điều trên thực hiện một lần chuyển qua dữ liệu và có thể sử dụng một chỉ mục trên Row INCLUDE(Value)
để tránh sắp xếp.