sql >> Databáze >  >> RDS >> Sqlserver

Rekurzivní klesající průměr v SQL Server 2012

Jednou z možných alternativ by bylo

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

Nebo pro aktualizovanou otázku pomocí 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

obě výše uvedené provádějí jeden průchod daty a mohou potenciálně používat index na Row INCLUDE(Value) abyste se vyhnuli řazení.




  1. Problémy s použitím pg_search s polymorfní asociací

  2. TSQL kontroluje, zda existuje konkrétní sekvence řádků

  3. Syntaxe pro výchozí hodnotu pro typ definovaný uživatelem jako tabulku

  4. Prostor používaný nulami v databázi