Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Rata-rata Peluruhan Rekursif di Sql Server 2012

Salah satu alternatif yang mungkin adalah

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

Atau untuk pertanyaan yang diperbarui menggunakan 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

kedua hal di atas melakukan single pass melalui data dan berpotensi menggunakan indeks pada Row INCLUDE(Value) untuk menghindari penyortiran.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transaksi dengan server tertaut loopback - masalah penguncian

  2. Sinkronisasi searah waktu nyata dari sql-server ke repositori data lain

  3. Memasukkan dari dua tabel lain ke tabel ketiga

  4. MSSQL - Konversi milidetik sejak 1970 ke datetime2

  5. Prosedur tersimpan lambat di Entity Framework