Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trung bình giảm dần đệ quy trong Sql Server 2012

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

SQL Fiddle

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

SQL Fiddle

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự kiện chờ SQL Server -1

  2. Có công cụ nào để xây dựng cây quan hệ của các thủ tục và chức năng được lưu trữ được sử dụng trong SQL Server 2008 không?

  3. ràng buộc duy nhất có điều kiện

  4. freeTDS không sử dụng cấu hình của nó

  5. Tránh đưa vào SQL mà không có tham số