Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Рекурсивно разпадащо се средно в Sql Server 2012

Една възможна алтернатива би била

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

Или за актуализирания въпрос, използвайки 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

и двете от горните извършват едно преминаване през данните и потенциално могат да използват индекс на Row INCLUDE(Value) за да избегнете сортиране.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server ПОРЪЧАЙ ПО дата и нулевите последни

  2. Не може да се зареди насипно. Код за грешка в операционната система 5 (Достъпът е отказан.)

  3. Как да вмъкна запис в множество таблици с помощта на тригер?

  4. Изчислете наличността на всеки продукт (Inkcode).

  5. Компресиране на текстово поле в Sql Server 2k8 R2