Saturday 22 July 2017

Moving Average 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. Subkueri memiliki 10 k mengeksekusi pada filter, agregat, dan langkah-langkah lainnya. Saya ingin menghitung rata-rata Moving pada kolom C4 dan C5 dengan 3 catatan rata-rata dan hasilnya harus di output ke tabel lain. Terima kasih sebelumnya. Tanggal Waktu mS C4 C5 08052012 0:00 00: 00.0 0.100341 45.75981 43.77025 08052012 0:00 00: 01.0 0.09143 45.4046 44.39561 08052012 0:00 00: 02.0 0.094116 44.87945 43.88213 08052012 0:00 00: 03.0 0.099365 45.75981 44.76503 08052012 0:00 00 : 04.0 0.09143 44.35193 44.35193 08052012 0:00 00: 05.0 0.093383 46.90839 43.91423 08052012 0:00 00: 06.0 0.098632 45.75981 43.77025 08052012 0:00 00: 07.0 0.09143 46.3337 45.32644 08052012 0:00 00: 08.0 0.092651 45.9439 45.9439 08052012 0:00 00 : 09.0 0.0979 44.76503 44.76503 08052012 0:00 00: 10.0 0.094848 46.14082 45.13776 08052012 0:00 00: 11.0 0.091918 46.13517 45.13224 08052012 0:00 00: 12.0 0.097167 44.76503 44.76503 08052012 0:00 00: 13.0 0.182495 46.06902 44.22626 08052012 0:00 00 : 14.0 0.09143 45.10773 44.00755 08052012 0:00 00: 15.0 0.096435 45.77092 43.78088 08052012 0:00 00: 16.0 0.09143 47.23642 43.2163 08052012 0:00 00: 17.0 0.091308 47.00573 43.00525 08052012 0:00 00: 18.0 0.095703 45.79871 44.80309 08052012 0:00 00 : 19.0 0.09143 45.19311 44.18882 08052012 0:00 00: 20.0 0.091308 46.00561 45.00549 08052012 0:00 00: 21.0 0.09497 44.83581 44.83581 08052012 0:00 00: 22.0 0.09143 45.15987 45.15987 08052012 0:00 00: 23.0 0.09143 47 46 08052012 0:00 00: 24.0 0.094238 47.86559 46.86839 08052012 0:00 00: 25.0 0.099365 48.75006 46.76026 08052012 0:00 00: 26.0 0.09143 48.38393 46.36793 08052012 0:00 00: 27.0 0.093505 47.90061 44.90682 08052012 0:00 00: 28.0 0.098754 47.74936 47.74936 Selasa, 23 April 2013 10:21 Naomi benar, Anda melewatkan titik koma sebelum DENGAN pernyataan. Saya telah menambahkan avg calc untuk C4 dan C5 pada kode di bawah ini, Salam, Dineshkumar, Harap Tandai sebagai Jawab jika posting saya menjawab pertanyaan Anda dan Vote as Helpful jika membantu Anda Ditandai sebagai jawaban oleh kkcci88888 Rabu, 24 April 2013 6: 47 AM Wednesday, April 24, 2013 5:12 AM Semua balasan Silahkan posting Tabel Definisi Anda, Contoh Data amp Diperlukan HASIL SET Silahkan Tandai sebagai Jawab jika jabatan saya sesuai untuk Anda atau Voting as Helpful jika membantu Anda. Junaid Hassan. Tuesday, April 23, 2013 10:29 AM Sama seperti penggoda: SELECT Datetime, AVG (C4) OVER (ORDER BY DateTime ROWS 2 2 RANGKA PENGANGKATAN DAN RENDAH), AVG (C5) OVER (ORDER BY DateTime ROWS 2 2 MEMENUHI SAAT INI ROW) FROM tbl Ini tidak akan bekerja untuk Anda, karena sintaks ini hanya tersedia di SQL 2012. Saya menyebutkannya, karena jika Anda memiliki kebutuhan untuk menghitung hal-hal seperti moving average, ini adalah dorongan kuat untuk pindah ke SQL 2012. Sementara Solusi lain yang diposting di thread akan bekerja, hal di atas akan berkinerja jauh lebih baik. Erland Sommarskog, SQL Server MVP, esquelsommarskog. se Diusulkan sebagai jawaban oleh Naomi N Moderator Rabu, 24 April 2013 12:22 Selasa, 23 April 2013 11:14 Rabu, 24 April 2013 12:58 AM Kesalahan. Mohon saran lebih lanjut. Rabu, 24 April 2013 1:24 AM Apakah Anda mencoba solusi yang saya sampaikan di atas. Apa hasilnya Salam, Dineshkumar, Tolong Tandai sebagai Jawab jika posting saya menjawab pertanyaan Anda dan Vote as Helpful jika membantu Anda Rabu, 24 April 2013 2:37 AM Hai, Dineshkum ar Terima kasih, tapi dari solusi Anda, perlu Plug manual dalam catatan mentah ATAU dapatkah Anda memberi saran lebih lanjut tentang memindahkan catatan secara otomatis (seperti yang kita punya lebih dari 3.000.000 catatan dalam tabel.) BTW, saya sedang dalam proses untuk menyiapkan SQL2012 dan mencoba solusi lain dari sini. Dalam kasus terburuk, saya akan menulis program VB untuk melakukannya tapi butuh waktu dan kinerja lambat. Rabu, 24 April 2013 3:31 AM Anda perlu mengganti tabel dengan nama tabel Anda dan Anda tidak memerlukan kode sebelum pernyataan - hanya digunakan untuk SIMULASI data Anda. Adapun kesalahan yang Anda dapatkan dengan solusi Erlands - apakah Anda membaca jawabannya dengan seksama Solusinya hanya bekerja di SQL Server 2012 dan tidak berfungsi di versi SQL Server sebelumnya. Bagi setiap ahli, ada pakar yang setara dan berlawanan. - Beckers Law Wednesday, April 24, 2013 3:34 AM Sama seperti penggoda: SELECT Datetime, AVG (C4) OVER (ORDER BY DateTime ROWS 2 2 RANGKA PENGANGKATAN DAN CURRENT), AVG (C5) OVER (ORDER BY DateTime ROWS BETWEEN 2 PRECEDING CURRENT ROW) FROM tbl Ini tidak akan bekerja untuk Anda, karena sintaks ini hanya tersedia di SQL 2012. Ini adalah pelanggaran mengerikan dari teori database relasional murni dan saya sangat menyukainya. Rabu, 24 April 2013 3:43 AM Bisakah Anda mengubah SQL Anda untuk menghasilkan yang terlampir. (Saya ingin memiliki moving average pada kolom C4 dan C5). 3.000.000 baris nama tabel dbo. myDB. Over3M Terima kasih banyak. Wednesday, April 24, 2013 3:47 AM Wednesday, April 24, 2013 3:53 AM Pesan kesalahannya sangat tepat dan memberi tahu Anda apa yang perlu Anda tambahkan di depan pernyataan WITH. Bagi setiap ahli, ada pakar yang setara dan berlawanan. - Beckers Law Wednesday, April 24, 2013 4:05 AM sql 2012 bukan database relasional murni :-) Anda juga bisa menggunakan Indeks Columnstore. Rabu, 24 April 2013 4:47 AM Maaf solusi ini hanya untuk SQL 2012. Itulah sebabnya mengapa melempar kesalahan. Jalankan di SQL 2012. jika (membantu) maka Vote () Rabu, 24 April 2013 5:06 Naomi benar, Anda melewatkan sebuah titik koma sebelum DENGAN pernyataan. Saya telah menambahkan avg calc untuk C4 dan C5 pada kode di bawah ini, Salam, Dineshkumar, Harap Tandai sebagai Jawab jika posting saya menjawab pertanyaan Anda dan Vote as Helpful jika membantu Anda Ditandai sebagai jawaban oleh kkcci88888 Rabu, 24 April 2013 6: 47 AM Wednesday, April 24, 2013 5:12 AM Anda hebat dan sepertinya berjalan dengan baik tapi sudah memakan waktu lebih dari 30 menit (tidak yakin berapa lama waktu yang dibutuhkan untuk menghitung catatan 3.000.000.) BTW, saya perlu menghitung rata-rata pergerakan Dan output ke meja, setelah itu, saya perlu mengelompokkannya menjadi 10minutes dan mengambil MAX avgc4 dan avgc5. Setiap saran lebih lanjut tentang bagaimana untuk menghitung atau saya perlu menunggu hasil yang dihasilkan dan menggunakan query lain untuk kelompok oleh datetime dalam catatan 10 menit dan melakukan MAX pada avgc4 avgc5. Banyak terima kasih lagi. Wednesday, April 24, 2013 6:54 AM Tolong jelaskan pertanyaan Anda sedikit lebih banyak pada kelompok itu 10 menit Jika Anda bisa memberi contoh (mungkin DDL) dengan data sampel dan hasil yang Anda harapkan, maka akan sangat membantu jika Memahami persyaratan Regards, Dineshkumar, Harap Tandai sebagai Jawab jika posting saya menjawab pertanyaan Anda dan Vote as Helpful if it helps you Wednesday, April 24, 2013 7:15 AM Jika tabel baru Anda (di mana Anda ingin menyimpan data ini) bukan Belum diciptakan Gunakan cara berikut ini, pilihlah tanda kutip, Dineshkumar, Tolong Tandai sebagai Jawab jika posting saya menjawab pertanyaan dan Vote Anda asalkan membantu Anda Rabu, 24 April 2013 7:23 AM Hai, Dineshkum ar Ini adalah kueri yang saya gunakan Untuk mengelompokkan catatan dalam 10 menit Hasil yang ingin saya dapatkan adalah (1) Menghasilkan rata-rata bergerak setiap 3 detik pada kolom C4 C5 (2) kelompok dengan catatan sebagai item (1) menjadi 10 menit (yaitu setiap 60x10 Catatan), menerapkan MAX (avgc4). MAX (avgc5) Jadi hasil akhir yang dituju adalah Date, Time, Max (Movingavgc4) setiap 10 menit rekaman, Max (Movingavgc5) setiap 10 menit catatan Rabu, 24 April 2013 7:47 AM Hai, Dineshkum ar Bisakah kamu Periksa sintaksnya karena macet. BTW, setelah berlari selama 2,1 jam, saya menginterupsi dan hasilnya hanya 94019 catatan. Out Table berisi 3.000.000 sehingga dibutuhkan sekitar 65 jam. Wednesday, April 24, 2013 8:46 AM Letakkan tablename Anda di tempat quotyournewtablequot ke skrip di atas. Anda tidak perlu menggunakan pilihan itu ke db0.dlamvagquot dalam kode Anda. Saya hanya menyebutkan quototect toquot untuk menunjukkan bahwa ini adalah metode untuk memasukkan catatan yang dipilih ke tabel baru, karena memasukkan catatan ke catatan yang ada memiliki sintaks yang berbeda, Dineshkumar, Harap Tandai sebagai Jawab jika posting saya menjawab pertanyaan Anda dan Beri Vote as Helpful if it Membantu Anda Disunting oleh Dinesh Kumar Rajendran Rabu, 24 April 2013 8:58 AM Rabu, 24 April 2013 8:55 Terima kasih. Itu berjalan sekarang Rabu, 24 April 2013 9:06 AM Sudah berjalan selama 17 jam sekarang tapi tidak ada hasil rekaman ke newtable. Kamis, 25 April 2013, 1:23 Microsoft sedang melakukan survei online untuk memahami pendapat Anda tentang situs Msdn Web. Jika Anda memilih untuk berpartisipasi, survei online akan dipresentasikan kepada Anda saat Anda meninggalkan situs MSDN. Apakah Anda ingin berpartisipasi 2017 Microsoft. Seluruh hak cipta.

No comments:

Post a Comment