sql >> Database teknologi >  >> RDS >> Sqlserver

Rekursivt faldende gennemsnit i SQL Server 2012

Et muligt alternativ ville være

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

Eller for det opdaterede spørgsmål ved hjælp af 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

begge ovenstående udfører en enkelt passage gennem dataene og kan potentielt bruge et indeks på Row INCLUDE(Value) for at undgå en sortering.




  1. Flere Venstre Slut med sum

  2. MySQL-betingelser fra flere rækker

  3. PostgreSQL:Database backup og gendannelse?

  4. Slow BESTIL BY i stort bord