Saturday 12 August 2017

Moving average query sql


Saya bekerja dengan SQL Server 2008 R2, mencoba untuk menghitung rata-rata bergerak. Untuk setiap record dalam pandangan saya, saya ingin mengumpulkan nilai dari 250 catatan sebelumnya, dan kemudian menghitung rata-rata untuk pilihan ini. Kolom tampilan saya adalah sebagai berikut: TransactionID itu unik. Untuk setiap TransactionID. Saya ingin menghitung rata-rata untuk nilai kolom, dari 250 catatan sebelumnya. Jadi untuk TransactionID 300, kumpulkan semua nilai dari 250 baris sebelumnya (lihat diurutkan turun oleh TransactionID) dan kemudian di kolom MovAvg tulis hasil rata-rata nilai tersebut. Saya ingin mengumpulkan data dalam berbagai catatan. Tanya 28 Okt 14 di 20: 58Ini adalah pertanyaan Evergreen Joe Celko. Saya mengabaikan platform DBMS yang digunakan. Tapi bagaimanapun Joe bisa menjawab lebih dari 10 tahun yang lalu dengan SQL standar. Joe Celko SQL Puzzles and Answer citation: Upaya pembaruan terakhir menunjukkan bahwa kita dapat menggunakan predikat untuk membuat kueri yang akan memberi kita rata-rata bergerak: Apakah kolom tambahan atau pendekatan kueri lebih baik Permintaan secara teknis lebih baik karena pendekatan UPDATE akan Denormalize database Namun, jika data historis yang tercatat tidak akan berubah dan menghitung rata-rata bergerak mahal, Anda mungkin mempertimbangkan untuk menggunakan pendekatan kolom. Query SQL Puzzle: dengan segala cara seragam Anda hanya membuang ember yang sesuai tergantung jarak dari titik waktu saat ini. Misalnya quottake weight1 untuk datapoints dalam waktu 24 jam dari datapoint current weight0.5 untuk datapoints dalam 48hrsquot. Kasus itu penting berapa banyak datapoint berurutan (seperti 6:12 dan 11:48) jauh dari satu sama lain Kasus penggunaan yang dapat saya pikirkan akan menjadi upaya untuk memperlancar histogram dimanapun datapoint tidak cukup padat ndash msciwoj 27 Mei di 22:22 Saya tidak yakin hasil yang diharapkan (output) Anda menunjukkan rata-rata bergerak sederhana (bergulir) rata-rata selama 3 hari. Sebab, misalnya, tiga angka pertama menurut definisi memberi: tapi Anda mengharapkan 4.360 dan membingungkannya. Meski begitu, saya menyarankan solusi berikut, yang menggunakan fungsi jendela AVG. Pendekatan ini jauh lebih efisien (jelas dan kurang intensif sumber daya) daripada DIRI-JOIN yang diperkenalkan pada jawaban lain (dan saya terkejut bahwa tidak ada yang memberikan solusi yang lebih baik). Anda melihat bahwa AVG dibungkus dengan kasus ketika rownum gt p. days kemudian memaksa NULL s pada baris pertama, di mana 3 hari Moving Average tidak ada artinya. Jawab 23 Feb 16 at 13:12 Kita bisa menerapkan metode join kiri kiri Joe Celkos (seperti yang dikutip oleh Diego Scaravaggi) untuk menjawab pertanyaan seperti yang ditanyakan. Menghasilkan hasil yang diminta: Menjawab hasil yang diminta: menjawab 9 Januari 16 di 0:33 Jawaban Anda 2017 Stack Exchange, IncExponential moving average di T-SQL Exponential moving averages serupa dengan rata-rata bergerak tertimbang karena mereka memberikan bobot yang lebih rendah terhadap perubahan sejak lama, dan bobot yang lebih besar untuk Perubahan terbaru Rata-rata bergerak tertimbang adalah linear, namun rata-rata bergerak eksponensial bersifat eksponensial. Artinya, bobot dapat dinyatakan sebagai kurva: Ada cara bagus untuk menghitung rata-rata pergerakan eksponensial di T-SQL menggunakan fitur yang tidak berdokumen tentang variabel dan jumlah total berjalan di SQL Server. Dalam posting blog ini saya akan menunjukkan bagaimana cara menggunakan metode tersebut untuk menghitung moving average eksponensial di T-SQL, namun saya juga akan menyajikan metode yang menggunakan fitur standar di SQL Server. Sayangnya, itu berarti menggunakan satu lingkaran. Dalam contoh saya akan menghitung 9 hari eksponensial moving average. Contohnya menggunakan database TAdb. Skrip untuk membuat TAdb dapat ditemukan di sini. Exponential Moving Average (EMA): Menjalankan Metode Total Teori di balik fitur total yang berjalan dalam pembaruan dijelaskan secara rinci oleh Jeff Moden dalam artikelnya Memecahkan Masalah Jumlah Total dan Permasalahan Ordinal. Sumber lain yang menjelaskan menggunakan metode ini untuk menghitung EMA adalah posting blog Menghitung Moving Averages dengan T-SQL oleh Gabriel Priester dan forum post Exponential Moving Average Challenge. Keduanya di SQL Server Central. Pada dasarnya, di T-SQL Anda dapat memperbarui variabel dan juga kolom dalam pernyataan pembaruan. Pembaruan dilakukan baris demi baris secara internal oleh SQL Server. Perilaku baris demi baris ini adalah perhitungan yang menghitung jumlah total yang mungkin. Contoh ini menunjukkan cara kerjanya: Perhatikan bahwa 8220ColumnRunningTotal8221 adalah total total 8220ColumnToSum8221. Dengan menggunakan metode ini kita bisa menghitung EMA9 dengan T-SQL ini: Perhitungan EMA agak sederhana. Kami menggunakan baris saat ini dan sebelumnya, tapi dengan bobot lebih ke baris saat ini. Bobot dihitung dengan rumus 2 (19), di mana 822098221 adalah parameter untuk panjang EMA. Untuk menghitung EMA9 untuk baris 10 di atas, perhitungannya adalah: Dalam kasus ini baris saat ini mendapat 20 dari berat (2 (19) 0,2) dan baris sebelumnya menghasilkan 80 dari berat (1-2 (19) 0.8). Anda menemukan penghitungan ini dalam pernyataan di atas dalam pernyataan KASUS: Exponential Moving Average (EMA): Metode Looping Sejauh yang saya tahu, kecuali metode total berjalan yang diuraikan di atas, tidak ada cara untuk menghitung EMA dengan menggunakan pernyataan SQL berbasis set. . Oleh karena itu, T-SQL di bawah ini menggunakan while loop untuk menghitung EMA9: Hasilnya sama seperti pada running total contoh diatas. Kinerja Seperti yang diharapkan, versi berbasis run based set adalah cara yang lebih cepat daripada versi loop. Pada mesin saya, solusi berbasis set adalah sekitar 300 ms, dibandingkan dengan sekitar 1200 dengan versi loop. Versi loop lebih sesuai dengan standar SQL. Jadi pilihan antara metode tergantung pada apa yang paling penting bagi Anda, kinerja atau standar. Rata-rata pergerakan eksponensial dapat digunakan dalam analisis kecenderungan, seperti pada jenis rata-rata bergerak lainnya, Simple Moving Average (SMA) dan Weighted moving average (WMA). Ada juga perhitungan lain dalam analisa teknikal yang menggunakan EMA, MACD misalnya. Posting blog ini adalah bagian dari seri tentang analisis teknis, TA, di SQL Server. Lihat tulisan lainnya di sini. Diposting oleh Tomas Lind Tomas Lind - Layanan konsultasi sebagai SQL Server DBA dan Developer Database di High Coast Database Solutions AB.

No comments:

Post a Comment