Monday 3 July 2017

Mysql เฉลี่ยเคลื่อนที่ ฟังก์ชั่น


การใช้ค่าเฉลี่ยเคลื่อนที่แบบเรียบเพื่อให้ข้อมูลที่ราบรื่นออกเป็นเทคนิคที่ค่อนข้างเป็นที่นิยมมากเกินไปไม่ดีตัวอย่างหลักใน SQL Anywhere Help อยู่ห่างไกลจากแบบง่ายสิ่งที่ทำให้ตัวอย่างนั้นมีความซับซ้อนเช่นกันนอกจากคำสั่งปัญหาที่คำนวณค่าเฉลี่ยเคลื่อนที่ของผลิตภัณฑ์ทั้งหมด การขายโดยเดือนในปี 2000.Here สิ่งที่ทำให้การอ้างอิง complex. two เพื่อ AVG function. a GROUP BY ซึ่งทั้งหมดด้วยตัวเองทำให้เพียงเกี่ยวกับ SELECT หัว scratcher ใด ๆ วลีซ่อน WINDOW clause. a ประโยค WINDOW ที่ doesn t แม้ใช้คำหลัก WINDOW เพื่อไม่ได้ฝึกหัด folks ที่ต้องการตัวอย่างมากขึ้นกว่าคนอื่นมันไม่ชัดเจนว่า WINDOW มีส่วนเกี่ยวข้องที่ทุกคนไม่เพียงประโยคใด ๆ ที่ใจคุณ, แต่หนึ่งที่มีทุกองค์ประกอบเดียวคุณสามารถรหัส WINDOW. a PARTITION BY. a ประโยค RANGE ไม่ประโยค ROWS ง่าย แต่เต็มเป่าข้อ RANGE หนึ่งที่มีความสนิทสนมกับ ORDER BY ฉันรู้ว่าแถวเป็น, แต่สิ่งที่ redacted คือ RANGE แต่รอมีมากขึ้นการเลือก RANGE ใน ROWS ในตัวอย่างนี้มีความสำคัญต่อการดำเนินการที่ถูกต้องของแบบสอบถามเพื่อการสนทนาที่สมบูรณ์ยิ่งขึ้นในตัวอย่างเฉพาะนี้ดูตัวอย่างที่ 23 - การคำนวณค่าเฉลี่ยเคลื่อนที่ ในกระดาษสีขาว OLAP ที่ยอดเยี่ยมของ Glenn Paulley ตอนนี้ขอให้ย้อนกลับไปดูค่าเฉลี่ย Average Moving Average จริงๆตัวอย่างต่อไปนี้แสดงข้อมูลมูลค่า 10 วันพร้อมกับค่าเฉลี่ยเคลื่อนที่ของค่าวันนี้และเมื่อวานนี้เป็นบรรทัด WINDOW ในบรรทัด 21 ถึง 23 กำหนดหน้าต่างเคลื่อนที่ที่มีแถวสองแถวแถวปัจจุบันแถว ROW ปัจจุบันและแถวที่เมื่อวานนี้ 1 PRECEDING. WINDOW ORDER BY กำหนดว่า PRECEDING หมายถึงแถวก่อนโดย and. the ROWS กำหนดขนาดของหน้าต่างเสมอสองแถวการแสดงออก AVG Over twodays ในบรรทัดที่ 19 อ้างถึงคำสั่ง WINDOW ตามชื่อและบอก SQL Anywhere เพื่อคำนวณค่าเฉลี่ยของค่าสองค่าที่มีอยู่ในหน้าต่างเลื่อน 2 แถวสำหรับแต่ละแถวในชุดผลลัพธ์ดังนั้นสำหรับ 2012 -02-02 ค่าเฉลี่ย 10 และ 20 คือ 15 000000.for 2012-02-03 ค่าเฉลี่ย 20 และ 10 คือ 15 000000.for 2012-02-04 ค่าเฉลี่ย 10 และ 30 คือ 20 000000.for 2012-02 -10 ค่าเฉลี่ยของ 10 และ 60 คือ 35 000000.Oops สิ่งที่เกี่ยวกับแถวแรกแถว 2012/02/01 ไม่ได้มีแถวที่กำหนดดังนั้นค่าเฉลี่ยของหน้าต่างที่เคลื่อนที่ตาม Glenn Paulley คือสีขาว กระดาษในกรณีของหน้าต่างเคลื่อนที่จะสันนิษฐานว่าแถวที่มีค่า Null อยู่ก่อนแถวแรกและหลังจากแถวสุดท้ายใน inpu t นั่นหมายความว่าเมื่อหน้าต่างเคลื่อนที่มี 2012-02-01 เป็น CURRENT ROW แถว PRECEDING หนึ่งแถวมีค่า NULL และเมื่อ SQL Anywhere คำนวณ AVG ที่มีค่า NULL จะไม่นับ NULL ที่ไม่มีอยู่ใน เศษหรือในตัวหารเมื่อคำนวณค่าเฉลี่ยที่นี่ s หลักฐานที่ว่าทำไม twodayaverage 10 000000 สำหรับแถวแรก 2012-02-01 โพสต์โดย Breck Carter ที่ 3 47 PM ก่อนหน้านี้เราได้กล่าวถึงวิธีการเขียนค่าเฉลี่ยกลิ้งใน Postgres โดยความต้องการที่เป็นที่นิยม เรากำลังแสดงวิธีการทำเช่นเดียวกันใน MySQL และ SQL Server เราจะอธิบายถึงวิธีการอธิบายแผนภูมิที่มีเสียงดังเช่นนี้ด้วยเส้นค่าเฉลี่ยที่เกิดขึ้นก่อนหน้านี้เป็นเวลา 7 วันเช่นนี้กราฟความคิดแรกของบิ๊กกราฟแรกด้านบนของเรามีเสียงดังและหนัก เพื่อให้ได้ข้อมูลที่เป็นประโยชน์จากเราสามารถทำให้เป็นไปอย่างราบรื่นโดยการคำนวณค่าเฉลี่ย 7 วันที่ด้านบนของข้อมูลพื้นฐานซึ่งสามารถทำได้โดยใช้ฟังก์ชันหน้าต่างการรวมตัวหรือคำจำกัดความที่สัมพันธ์กัน - เราจะกล่าวถึงสองข้อแรก ค่าเฉลี่ยก่อนหน้านี้ซึ่งหมายความว่าค่าเฉลี่ยจุดที่ 7 ของ เดือนเป็นค่าเฉลี่ยของเจ็ดวันแรกในขณะนี้การเปลี่ยนแปลงนี้จะเพิ่มขึ้นในกราฟทางด้านขวาเนื่องจากค่าเฉลี่ยที่สูงขึ้นในช่วงเจ็ดวันถัดไปขั้นแรกให้สร้างตารางจำนวนขั้นกลางเราต้องการคำนวณค่าเฉลี่ยมากกว่า สมมติว่าเรามีตารางผู้ใช้ทั่วไปที่มีแถวต่อผู้ใช้ใหม่และสร้าง timestamp เราสามารถสร้างตารางการลงชื่อสมัครใช้ของเราได้เช่นนี้ใน Postgres และ SQL Server คุณสามารถใช้งานนี้เป็น CTE ใน MySQL ที่คุณสามารถทำได้ บันทึกเป็นตารางชั่วคราวโพสต์ทอยส์ Rolling Average. Festunately Postgres มีฟังก์ชันหน้าต่างซึ่งเป็นวิธีที่ง่ายที่สุดในการคำนวณค่าเฉลี่ยที่ทำงานแบบสอบถามนี้อนุมานว่าวันที่ไม่มีช่องว่างแบบสอบถามมีค่าเฉลี่ยในช่วงเจ็ดแถวที่ผ่านมาไม่ใช่อดีต วันที่เจ็ดถ้าข้อมูลของคุณมีช่องว่างกรอกข้อมูลเหล่านี้ด้วย generateseries หรือเข้าร่วมกับตารางที่มีแถววันที่ที่หนาแน่นมิลลิวินาที Rolling Average. MySQL ขาดฟังก์ชันหน้าต่าง แต่เราสามารถคำนวณได้โดยใช้ self-joins สำหรับแต่ละแถวใน tabl นับของเรา e เราเข้าร่วมแถวที่อยู่ภายในเจ็ดวันที่ผ่านมาและใช้ค่าเฉลี่ยแบบสอบถามนี้จะจัดการกับช่องว่างวันที่เรากำลังมองหาที่แถวภายในช่วงวันที่มากกว่าแถวก่อน N SQL Server Rolling Average. SQL Server มี ฟังก์ชั่นหน้าต่างเพื่อคำนวณค่าเฉลี่ยกลิ้งสามารถทำได้ทั้งในรูปแบบ Postgres หรือสไตล์ MySQL สำหรับความเรียบง่ายเราอีกครั้งโดยใช้รุ่น MySQL ด้วยตัวเองเข้าร่วมนี้เป็น conceptually เช่นเดียวกับใน MySQL การแปลเพียงอย่างเดียวคือฟังก์ชั่ dateadd และอย่างชัดเจน กลุ่มที่มีชื่อตามคอลัมน์ค่าเฉลี่ยอื่น ๆ เราเน้นที่ค่าเฉลี่ยถ่วงน้ำหนัก 7 วันในการโพสต์นี้หากเราต้องการดูค่าเฉลี่ยชั้นนำ 7 วันก็ทำได้ง่ายเหมือนกับการจัดเรียงวันที่ในทิศทางอื่นหากเราต้องการดู ที่ศูนย์เฉลี่ยเรา d use. Postgres แถวระหว่าง 3 ก่อนหน้าและ 3 ต่อไปนี้.MySqlระหว่าง - 3 และ 3 ใน MySQL. SQL Server ระหว่างวันที่ dateadd, -3 และ dateadd, 3.Exposential moving average ใน T-SQL ค่าเฉลี่ยเลขยกกำลังถ่วงน้ำหนักใกล้เคียงกับน้ำหนักที่มีการระบุไว้ ving ค่าเฉลี่ยในการที่พวกเขากำหนดน้ำหนักน้อยกว่าการเปลี่ยนแปลงนานมาแล้วและน้ำหนักมากขึ้นเพื่อการเปลี่ยนแปลงล่าสุด Weighted moving averages เป็นเส้นตรง แต่ค่าเฉลี่ยเคลื่อนที่แบบเสแสร้งเป็นเลขชี้กำลังนั่นคือน้ำหนักสามารถแสดงเป็นเส้นโค้งมีวิธีที่ดีในการคำนวณ ค่าเฉลี่ยเคลื่อนที่ที่เป็นตัวเลขใน T-SQL โดยใช้คุณลักษณะที่ไม่มีการจัดทำขึ้นเกี่ยวกับตัวแปรและจำนวนทั้งหมดที่รันใน SQL Server ในโพสต์บล็อกนี้ฉันจะแสดงวิธีใช้วิธีการคำนวณค่าเฉลี่ยเคลื่อนที่ที่อธิบายไว้ใน T-SQL แต่ฉันจะนำเสนอวิธีการที่ โดยใช้คุณสมบัติมาตรฐานใน SQL Server แต่น่าเสียดายที่นั่นหมายถึงการใช้ลูปในตัวอย่างที่ฉันจะคำนวณค่าเฉลี่ยเคลื่อนที่แบบเสวนา 9 วันตัวอย่างใช้ฐานข้อมูล TAdb A script เพื่อสร้าง TAdb สามารถดูได้ที่นี่ EMAExponential Moving Average EMA Total Totals Method ทฤษฎีที่อยู่เบื้องหลังคุณสมบัติการทำงานทั้งหมดในการปรับปรุงจะอธิบายในรายละเอียดโดยเจฟฟ์ Moden ในบทความของเขาการแก้ปัญหาการทำงานรวมและ Ordinal Rank ปัญหาเอกสารอื่น ๆ ที่อธิบายการใช้ วิธีนี้ในการคำนวณ EMA คือการโพสต์บล็อกการคำนวณค่าเฉลี่ยเคลื่อนที่โดยใช้ T-SQL โดย Gabriel Priester และฟอรัมโพสต์โพสต์ค่าเฉลี่ยความท้าทายในการย้ายค่าเฉลี่ยทั้งใน SQL Server Central โดยทั่วไปแล้วใน T-SQL คุณสามารถอัพเดตตัวแปรและคอลัมน์ในการอัพเดต คำสั่งการปรับปรุงจะทำแถวโดยแถวภายในโดย SQL Server พฤติกรรมแถวโดยแถวนี้เป็นสิ่งที่ทำให้การคำนวณรวมทำงานได้ตัวอย่างนี้แสดงวิธีการทำงานหมายเหตุว่า ColumnRunningTotal เป็นผลรวมของ ColumnToSum การใช้วิธีนี้เราสามารถคำนวณ EMA9 กับ T-SQL นี้การคำนวณ EMA ค่อนข้างง่ายเราใช้แถวปัจจุบันและก่อนหน้านี้ แต่มีน้ำหนักมากขึ้นในแถวปัจจุบันน้ำหนักคำนวณโดยสูตร 2 1 9 โดยที่ 9 เป็นพารามิเตอร์สำหรับความยาวของ EMA เมื่อต้องการคำนวณ EMA9 สำหรับแถว 10 ด้านบนการคำนวณคือในกรณีนี้แถวปัจจุบันมีน้ำหนัก 20 จาก 2 1 9 0 2 และแถวก่อนหน้าจะมีน้ำหนัก 80 จาก 1-2 1 9 0 8. คุณพบสิ่งนี้ คำนวณในคำสั่งข้างต้น ในคำสั่ง CASEExpectally Moving Average วิธีการวนรอบ EMA เท่าที่ฉันรู้ยกเว้นวิธีการทั้งหมดที่ระบุไว้ด้านบนไม่มีวิธีใดในการคำนวณ EMA โดยใช้คำสั่ง SQL ที่กำหนดขึ้นดังนั้น T-SQL ด้านล่างใช้ ในขณะที่ห่วงคำนวณ EMA9 ผลเช่นเดียวกับในผลรวมตัวอย่างเช่นข้างต้นเป็นที่คาดหวังชุดทำงานตามผลรวมรุ่นเป็นวิธีที่เร็วกว่ารุ่นห่วงบนเครื่องของฉันชุดโซลูชั่นตามประมาณ 300 ms เทียบกับเกี่ยวกับ 1200 กับรุ่นห่วงรุ่นห่วงเป็นมากขึ้นตามมาตรฐาน SQL อย่างไรก็ตามทางเลือกระหว่างวิธีการขึ้นอยู่กับสิ่งที่สำคัญที่สุดสำหรับคุณประสิทธิภาพหรือมาตรฐานค่าเฉลี่ยเคลื่อนที่ชี้แจงสามารถใช้ในการวิเคราะห์แนวโน้มเช่นเดียวกับประเภทอื่น ๆ ของค่าเฉลี่ยเคลื่อนที่เฉลี่ยเคลื่อนที่เฉลี่ย SMA และ WMA เฉลี่ยถ่วงน้ำหนักนอกจากนี้ยังมีการคำนวณอื่น ๆ ในการวิเคราะห์ทางเทคนิคที่ใช้ EMA เช่น MACD โพสต์บล็อกนี้เป็นส่วนหนึ่งของซีรีส์เกี่ยวกับการวิเคราะห์ทางเทคนิค, TA ใน SQL Server ดูโพสต์อื่น ๆ ที่นี่โพสต์โดย Tomas Lind. Tomas Lind - บริการให้คำปรึกษาในฐานะ SQL Server DBA และ Database Developer ที่ High Coast Database Solutions AB

No comments:

Post a Comment