Wednesday 12 July 2017

Moving Average In Sql Server 2008


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 pandangan 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 tuliskan hasil rata-rata nilai tersebut. Saya ingin mengumpulkan data dalam berbagai catatan. Tanya 28 Okt 14 di 20: 58Saya mencoba untuk memiliki kolom rata-rata berjalan dalam pernyataan SELECT berdasarkan kolom dari baris sebelumnya dalam pernyataan SELECT yang sama. Rata-rata yang saya butuhkan didasarkan pada baris sebelumnya di resultset. Baris 3 kolom Average pertama adalah null karena tidak ada baris sebelumnya. Baris 4 pada kolom rata-rata menunjukkan rata-rata kolom Number dari 3 baris sebelumnya. Saya butuh bantuan untuk membuat pernyataan SQL Select yang akan melakukan ini. Sebuah self join sederhana tampaknya akan berjalan jauh lebih baik daripada subquery referensi baris Menghasilkan 10k baris data uji: Saya akan menarik kasus khusus dari 3 baris pertama dari kueri utama, Anda dapat menemukan semua yang masuk jika Anda benar-benar menginginkannya. Itu di set baris. Bergabunglah dengan kueri: Di ​​komputer saya, ini membutuhkan waktu sekitar 10 detik, pendekatan subkueri yang ditunjukkan Aaron Alton memerlukan waktu sekitar 45 detik (setelah saya mengubahnya untuk mencerminkan tabel sumber uji saya): Jika Anda melakukan SET STATISTIK PROFILE ON, Anda dapat melihat Bergabung diri memiliki 10 k mengeksekusi di meja spool. Subquery memiliki 10 k mengeksekusi pada filter, agregat, dan langkah-langkah lainnya. AVG (Transact-SQL) ALL Menerapkan fungsi agregat ke semua nilai. SEMUA adalah default DISTINCT Menentukan bahwa AVG hanya dilakukan pada setiap instance unik dari suatu nilai, berapa pun nilainya akan terjadi. Ekspresi Merupakan ekspresi dari kategori tipe data numerik atau perkiraan numerik yang tepat, kecuali tipe data bit. Fungsi agregat dan subqueries tidak diizinkan. OVER (partitionbyclause orderbyclause) partitionbyclause membagi set hasil yang dihasilkan oleh FROM clause menjadi partisi dimana fungsi diterapkan. Jika tidak ditentukan, fungsi memperlakukan semua baris dari hasil query ditetapkan sebagai satu kelompok. Orderbyclause menentukan urutan logis dimana operasi dilakukan. Orderbyclause diperlukan Untuk informasi lebih lanjut, lihat OVER Clause (Transact-SQL). Jenis pengembalian ditentukan oleh jenis hasil ekspresi yang dievaluasi. Kategori desimal (p, s) Jika tipe data ekspresi adalah tipe data alias, tipe pengembalian juga merupakan tipe data alias. Namun, jika tipe data dasar tipe data alias dipromosikan, misalnya dari tinyint ke int. Nilai kembalian adalah tipe data yang dipromosikan dan bukan tipe data alias. AVG () menghitung rata-rata seperangkat nilai dengan membagi jumlah nilai tersebut dengan menghitung nilai nonnull. Jika jumlah melebihi nilai maksimum untuk jenis data dari nilai pengembalian, kesalahan akan dikembalikan. AVG adalah fungsi deterministik bila digunakan tanpa klausa OVER dan ORDER BY. Ini nondeterministic bila ditentukan dengan klausa OVER dan ORDER BY. Untuk informasi lebih lanjut, lihat Fungsi Deterministik dan Nondeterministik. A. Menggunakan fungsi SUM dan AVG untuk perhitungan Contoh berikut menghitung jam liburan rata-rata dan jumlah jam cuti sakit yang digunakan oleh wakil presiden Adventure Works Cycles. Masing-masing fungsi agregat ini menghasilkan nilai ringkasan tunggal untuk semua baris yang diambil. Contohnya menggunakan database AdventureWorks2012.

No comments:

Post a Comment