sql >> Database >  >> RDS >> Sqlserver

Recursief Rottend Gemiddelde in Sql Server 2012

Een mogelijk alternatief zou zijn

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

Of voor de bijgewerkte vraag met 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

beide bovenstaande voeren een enkele doorgang door de gegevens uit en kunnen mogelijk een index gebruiken op Row INCLUDE(Value) om een ​​sortering te vermijden.




  1. Oracle SQL invoegen in met With-clausule

  2. MySQL:Onbekende kolom in waar-clausulefout

  3. Oracle Stored Procedure inout parameter issue - Heb de oplossing - Typfout

  4. Ik krijg steeds de foutrelatie [TABEL] bestaat niet