ฉันกำลังทำงานกับ SQL Server 2008 R2 พยายามคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับแต่ละระเบียนในมุมมองของฉันฉันต้องการรวบรวมค่าของระเบียนก่อนหน้า 250 รายการและคำนวณค่าเฉลี่ยสำหรับคอลัมน์ที่เลือกนี้คอลัมน์มุมมองของฉันมีดังนี้.TransactionID ไม่ซ้ำกันสำหรับ TransactionID แต่ละรายการฉันต้องการคำนวณค่าเฉลี่ยสำหรับค่าของคอลัมน์มากกว่า 250 ระเบียนก่อนหน้าดังนั้นสำหรับ TransactionID 300 ให้เก็บค่าทั้งหมดจากมุมมอง 250 แถวก่อนหน้านี้จะถูกจัดเรียงตามลำดับจากมากไปน้อย TransactionID จากนั้นในคอลัมน์ MovAvg จะเขียนผลลัพธ์ของ ค่าเฉลี่ยของค่าเหล่านี้ฉันกำลังมองหาเพื่อเก็บรวบรวมข้อมูลภายในช่วงของ records. asked 28 ตุลาคม 14 ที่ 20 58 ก่อนหน้านี้เราได้กล่าวถึงวิธีการเขียนกลิ้งเฉลี่ยใน Postgres โดยความต้องการที่นิยมเรากำลังแสดงวิธีการทำเช่นเดียวกันใน MySQL และ SQL Server. We จะครอบคลุมถึงวิธีการอธิบายแผนภูมิที่มีเสียงดังเช่นนี้ด้วยเส้นค่าเฉลี่ย 7 วันที่ผ่านมาเช่นนี้ไอเดียบิวด์กราฟแรกของเราด้านบนมีความดังและมีเสียงดังมากที่จะได้รับข้อมูลที่เป็นประโยชน์จากเราสามารถทำให้เรียบโดย p การใช้ค่าเฉลี่ย 7 วันที่ด้านบนของข้อมูลพื้นฐานซึ่งสามารถทำได้โดยใช้ฟังก์ชันหน้าต่างการรวมตัวหรือคำจำกัดความย่อยที่เกี่ยวข้อง - เราจะกล่าวถึงสองข้อแรกเราจะเริ่มต้นด้วยค่าเฉลี่ยก่อนหน้าซึ่งหมายความว่าค่าเฉลี่ยจุดบน วันที่ 7 ของเดือนเป็นค่าเฉลี่ยของเจ็ดวันแรกโดยปกติแล้วจะเป็นการเลื่อนตำแหน่งของกราฟไปทางขวาเนื่องจากการคำนวณค่าเฉลี่ยเป็นเวลาเฉลี่ยในช่วงเจ็ดวันต่อจากนี้ขั้นแรกให้สร้างตารางการคำนวณขั้นกลางเราต้องการคำนวณ เฉลี่ยเมื่อสมัครสมาชิกรวมกันในแต่ละวันสมมติว่าเรามีตารางผู้ใช้ทั่วไปที่มีแถวต่อผู้ใช้รายใหม่และสร้างไทม์สแต้มเราสามารถสร้างตารางการลงทะเบียนของเราทั้งหมดได้เช่นเดียวกับใน Postgres และ SQL Server คุณสามารถใช้งานนี้เป็น CTE ใน MySQL คุณสามารถบันทึกเป็นตารางชั่วคราวโพสต์โกรกลิ้งเฉลี่ยโชคดีที่ Postgres มีฟังก์ชันหน้าต่างซึ่งเป็นวิธีที่ง่ายที่สุดในการคำนวณค่าเฉลี่ยที่ทำงานแบบสอบถามนี้อนุมานว่าวันที่ไม่มีช่องว่างแบบสอบถามมีค่าเฉลี่ยในช่วงเจ็ดแถวที่ผ่านมา ไม่ใช่อดีตที่ผ่านมา ถ้าข้อมูลของคุณมีช่องว่างกรอกข้อมูลเหล่านี้ด้วย generateseries หรือเข้าร่วมกับตารางที่มีแถววันที่มีความหนาแน่นสูงมิลเลบร้ากลิ้ง Average. MySQL ขาดฟังก์ชันหน้าต่าง แต่เราสามารถคำนวณได้โดยใช้ Self-Join สำหรับแต่ละแถวในตารางนับของเรา เราเข้าร่วมทุกแถวที่อยู่ภายในเจ็ดวันที่ผ่านมาและใช้ค่าเฉลี่ยการค้นหานี้จะจัดการกับช่องว่างวันที่เรากำลังมองแถวที่อยู่ในช่วงวันที่มากกว่าแถวก่อน N SQL Server Rolling Average. SQL Server มีหน้าต่าง ดังนั้นคำนวณค่าเฉลี่ยกลิ้งสามารถทำได้ทั้งในรูปแบบ Postgres หรือสไตล์ MySQL สำหรับความเรียบง่ายเราใช้ MySQL รุ่นด้วยตนเองเข้าร่วมนี้เป็น conceptually เช่นเดียวกับใน MySQL แปลเฉพาะเป็นฟังก์ชัน dateadd และชื่ออย่างชัดเจน กลุ่มโดยคอลัมน์ค่าเฉลี่ยอื่น ๆ เราเน้นไปที่ค่าเฉลี่ยถ่วงน้ำหนัก 7 วันในโพสต์นี้หากเราต้องการดูค่าเฉลี่ยชั้นนำ 7 วันก็ทำได้ง่ายๆเพียงแค่เลือกวันที่ในทิศทางอื่นหากเราต้องการดู ศูนย์ ed เฉลี่ยเรา d use. Postgres แถวระหว่าง 3 ก่อนหน้าและ 3 ต่อไปนี้.MySqlระหว่าง - 3 และ 3 ใน MySQL. SQL Server ระหว่างวันที่ dateadd, -3, และ dateadd, 3.This เป็น Evergreen Joe Celko คำถามฉันไม่สนใจที่ มีการใช้แพลตฟอร์ม DBMS แต่ในกรณีใด Joe สามารถตอบคำถามได้มากกว่า 10 ปีด้วยมาตรฐาน SQL. Joe Celko SQL ปริศนาและคำตอบที่อ้างว่าความพยายามในการอัปเดตครั้งล่าสุดแสดงให้เห็นว่าเราสามารถใช้คำกริยาเพื่อสร้างแบบสอบถามที่จะทำให้เราเคลื่อนไหวได้ แบบสอบถามเป็นเทคนิคที่ดีกว่าเพราะวิธี UPDATE จะ denormalize ฐานข้อมูล แต่ถ้าข้อมูลทางประวัติศาสตร์ที่ถูกบันทึกไว้จะไม่เปลี่ยนแปลงและการคำนวณค่าเฉลี่ยเคลื่อนที่มีราคาแพงคุณอาจลองใช้ คอลัมน์ SQL แบบสอบถามปริศนา. byทั้งหมดหมายความว่าคุณเพียงแค่โยนไปยังถังน้ำหนักที่เหมาะสมขึ้นอยู่กับระยะทางจากจุดเวลาปัจจุบันเช่นน้ำหนัก 1 สำหรับ datapoints ภายใน 24 ชั่วโมงจาก datapoint ปัจจุบัน น้ำหนัก 0 5 สำหรับ datapoints ภายใน 48hrs กรณีที่มันสำคัญเท่าใด datapoints ติดต่อกันเช่น 6 12am และ 11 48pm อยู่ไกลจากกันกรณีใช้ฉันสามารถคิดจะพยายามที่จะเรียบ histogram ที่ datapoints ไม่หนาพอ msciwoj 27 พฤษภาคม 15 ที่ 22 22. ฉันไม่แน่ใจว่าผลลัพท์ที่คาดหวังของคุณแสดงค่าเฉลี่ยของการเคลื่อนย้ายแบบคลาสสิกเป็นเวลา 3 วันตัวอย่างเช่นหมายเลขสามตัวแรกของคำอธิบายให้ แต่คุณคาดหวังว่า 360 360 จะสับสนอย่างไรก็ตามฉัน แนะนำวิธีแก้ปัญหาต่อไปนี้ซึ่งใช้ AVG หน้าต่างฟังก์ชันวิธีนี้มีประสิทธิภาพมากขึ้นชัดเจนและทรัพยากรน้อยกว่า SELF-JOIN แนะนำในคำตอบอื่น ๆ และฉันประหลาดใจที่ไม่มีใครได้ให้ทางออกที่ดีกว่าคุณเห็นว่า AVG ถูกห่อ กับกรณี rownum แล้วบังคับ NULL s ในแถวแรกที่ 3 วัน Moving Average มีความหมาย. ตอบ 23 กุมภาพันธ์ 16 ที่ 13 12 เราสามารถใช้ Joe Celko s ซ้ายสกปรกวิธีการเข้าร่วมตามที่อ้างถึงข้างต้นโดย Diego Scaravaggi เพื่อตอบ ถามคำถามตามที่ได้ถามสร้างเกรย์เอาท์พุทที่ร้องขอเอาไว้ตอบ 9 ม. ค. 16 ที่ 0 33. คำตอบของคุณ 2017 Stack Exchange, Inc.
No comments:
Post a Comment