การย้าย ค่าเฉลี่ย Sql Oracle
การคำนวณโดยทั่วไปในการวิเคราะห์แนวโน้มคือค่าเฉลี่ยเคลื่อนที่หรือแบบกลิ้งค่าเฉลี่ยเคลื่อนที่คือค่าเฉลี่ยของยกตัวอย่างเช่น 10 แถวสุดท้ายค่าเฉลี่ยเคลื่อนที่แสดงเส้นโค้งที่ราบรื่นกว่าค่าที่แท้จริงมากขึ้น เป็นระยะเวลานานสำหรับค่าเฉลี่ยเคลื่อนที่ซึ่งเป็นเครื่องมือที่ดีสำหรับการวิเคราะห์แนวโน้มโพสต์บล็อกนี้จะแสดงวิธีการคำนวณค่าเฉลี่ยเคลื่อนที่ใน T-SQL วิธีต่างๆจะใช้ขึ้นอยู่กับรุ่นของ SQL Server แผนภูมิด้านล่างแสดงให้เห็นถึงผลการปรับให้เรียบ เส้นสีแดงกับค่าเฉลี่ยเคลื่อนที่ 200 วันราคาหุ้นเป็นเส้นสีฟ้าแนวโน้มระยะยาวสามารถมองเห็นได้ชัดเจน T-SQL Moving Avergage 200 วันการสาธิตด้านล่างนี้ต้องการฐานข้อมูล TAdb ที่สามารถสร้างขึ้นพร้อมกับสคริปต์ตั้งอยู่ที่นี่ ตัวอย่างที่จะเกิดขึ้นเราจะคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับ 20 วันที่ผ่านมาทั้งนี้ขึ้นอยู่กับรุ่นของ SQL Server จะมีวิธีการอื่นในการคำนวณและตามที่เราจะเห็นในภายหลังเวอร์ชันใหม่ของ SQL Server มีค่า nctions ช่วยให้การคำนวณมีประสิทธิภาพมากขึ้น SQL Server 2012 และรุ่นที่ใหม่กว่า Moving Average รุ่นนี้ใช้ประโยชน์จากฟังก์ชันหน้าต่างรวม Whats new ใน SQL 2012 คือความเป็นไปได้ที่จะ จำกัด ขนาดของหน้าต่างโดยระบุจำนวนแถวก่อนหน้าหน้าต่างควรมี ก่อนหน้านี้เป็น 19 เนื่องจากเราจะรวมแถวปัจจุบันไว้ด้วยในการคำนวณตามที่คุณเห็นการคำนวณค่าเฉลี่ยเคลื่อนที่ใน SQL Server 2012 ทำได้ค่อนข้างง่ายตัวเลขด้านล่างแสดงให้เห็นถึงหลักการ windowing แถวปัจจุบันมีเครื่องหมายสีเหลือง หน้าต่างถูกทำเครื่องหมายด้วยพื้นหลังสีน้ำเงินค่าเฉลี่ยเคลื่อนที่เป็นเพียงค่าเฉลี่ยของ QuoteClose ในเส้นสีน้ำเงิน T-SQL หน้าต่างเฉลี่ยเคลื่อนที่ผลของการคำนวณใน SQL Server รุ่นเก่าจะเหมือนกันดังนั้นจึงจะไม่แสดงอีกครั้ง . SQL Server 2005 2008R2 Moving Average รุ่นนี้ใช้ประโยชน์จากการแสดงออกของตารางทั่วไป CTE คือการอ้างถึงตัวเองเพื่อรับ 20 แถวสุดท้ายสำหรับแต่ละ row. Moving Average ก่อน SQL Server 2005.The pr e 2005 รุ่นจะใช้ outer outer ซ้ายไปยังตารางเดียวกันเพื่อให้ได้ 20 แถวสุดท้ายตารางด้านนอกสามารถกล่าวได้ว่ามีหน้าต่างที่เราต้องการคำนวณค่าเฉลี่ยในการเปรียบเทียบประสิทธิภาพหากเราเรียกใช้สามวิธีที่แตกต่างกันพร้อมกันและ ตรวจสอบแผนการดำเนินการผลมีความแตกต่างอย่างมากในการปฏิบัติงานระหว่าง methodsparision สามวิธีที่แตกต่างกันในการคำนวณค่าเฉลี่ยเคลื่อนที่เป็นคุณสามารถดูการปรับปรุงฟังก์ชัน windowing ใน SQL 2012 ทำให้แตกต่างกันมากในการปฏิบัติตามที่กล่าวถึงในการเริ่มต้นของ โพสต์นี้ค่าเฉลี่ยเคลื่อนที่จะถูกใช้เป็นเครื่องมือในการอธิบายถึงแนวโน้มวิธีการทั่วไปคือการรวมค่าเฉลี่ยเคลื่อนที่ของความยาวที่ต่างกันเพื่อให้ทราบถึงการเปลี่ยนแปลงในแนวโน้มระยะสั้นระยะกลางและระยะยาวตามลำดับโดยเฉพาะความสนใจคือการข้ามเส้นแนวโน้ม ตัวอย่างเช่นเมื่อแนวโน้มระยะสั้นเคลื่อนที่ไปตามแนวโน้มระยะยาวหรือระยะกลางอาจถูกตีความว่าเป็นสัญญาณซื้อในการวิเคราะห์ทางเทคนิคและเมื่อแนวโน้มระยะสั้นเคลื่อนที่ไปตาม เส้นแนวโน้มที่ยาวขึ้นนี้สามารถตีความได้ว่าเป็นสัญญาณการขายแผนภูมิด้านล่างแสดงคำคม Ma20, Ma50 และ Ma200.T-SQL Ma20, Ma50, Ma200 สัญญาณซื้อและขายบทความบล็อกนี้เป็นส่วนหนึ่งของซีรี่ส์เกี่ยวกับการวิเคราะห์ทางเทคนิค , TA ใน SQL Server ดูโพสต์อื่น ๆ ที่นี่โพสต์โดย Tomas Lind. Using ค่าเฉลี่ยเคลื่อนที่แบบเรียบเพื่อให้ข้อมูลที่ราบรื่นเป็นเทคนิคที่ค่อนข้างนิยมมากเกินไปไม่ดีตัวอย่างหลักใน SQL Anywhere Help อยู่ไกลจากง่ายสิ่งที่ทำให้ ตัวอย่างเช่นซับซ้อนนอกจากงบปัญหาที่คำนวณค่าเฉลี่ยเคลื่อนที่ของการขายผลิตภัณฑ์ทั้งหมดโดยเดือนในปี 2000.Here สิ่งที่ทำให้การอ้างอิง complex. two สอง AVG function. a GROUP BY ซึ่งทั้งหมดด้วยตัวเองทำให้เพียง เกี่ยวกับ SELECT head-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 นี้เป็น Evergreen Joe Celko คำถามฉันละเว้นซึ่งเป็นแพลตฟอร์ม DBMS ใช้ แต่ในกรณีใด Joe สามารถตอบมากกว่า 10 ปีที่ผ่านมากับมาตรฐาน SQL. Joe Celko SQL ปริศนาและคำตอบอ้างอิงที่พยายามปรับปรุงครั้งล่าสุดแสดงให้เห็นว่าเราสามารถใช้คำกริยาในการสร้างแบบสอบถามที่จะให้เรา average. Is เคลื่อนไหว คอลัมน์พิเศษหรือวิธีการสืบค้นที่ดีกว่าแบบสอบถามดีกว่าทางเทคนิคเนื่องจากวิธีการ UPDATE จะ denormalize ฐานข้อมูลอย่างไรก็ตามหากมีการบันทึกข้อมูลทางประวัติศาสตร์จะไม่เปลี่ยนแปลงและการคำนวณค่าเฉลี่ยเคลื่อนที่มีราคาแพงคุณอาจลองใช้ คอลัมน์ใช้ SQL แบบสอบถามปริศนาทั้งหมดโดยใช้เครื่องแบบคุณเพียงแค่โยนไปยังถังน้ำหนักที่เหมาะสมขึ้นอยู่กับระยะทางจากจุดเวลาปัจจุบันตัวอย่างเช่นใช้น้ำหนัก 1 สำหรับจุดข้อมูลภายใน 24 ชั่วโมงจากน้ำหนักจุดข้อมูลปัจจุบัน 0 5 สำหรับจุดภายใน 48hrs กรณีที่มัน เรื่องเท่าใด datapoints ติดต่อกันเช่น 6 12am และ 11 48pm อยู่ไกลจากกันกรณีใช้ฉันสามารถคิดจะพยายามที่จะราบรื่น histogram ที่ใดก็ตามที่ datapoints ไม่หนาพอ msciwoj 27 พฤษภาคมที่ 22 22 ฉันไม่แน่ใจว่า ผลลัพท์ที่คาดหวังของคุณแสดงค่าเฉลี่ยของการเคลื่อนย้ายแบบคลาสสิกเป็นเวลา 3 วันตัวอย่างเช่นหมายเลขสามตัวแรกของคำอธิบายให้ความหมาย แต่คุณคาดหวังว่าจะมี 360 360 และเกิดความสับสนอย่างไรก็ตามผมขอแนะนำโซลูชันต่อไปนี้ซึ่งใช้ฟังก์ชันหน้าต่าง AVG วิธีนี้มีประสิทธิภาพมากขึ้นและใช้ทรัพยากรน้อยกว่า SELF-JOIN ในคำตอบอื่น ๆ และฉันประหลาดใจที่ไม่มีใครให้คำตอบที่ดีขึ้นคุณเห็น AVG คือ w rapped กับกรณี rownum แล้วบังคับ NULL s ในแถวแรกที่ 3 วัน Moving Average มีความหมาย. ตอบ 23 กุมภาพันธ์ 16 ที่ 13 12 เราสามารถใช้ Joe Celko s ซ้ายสกปรกเข้าร่วมวิธีการอ้างถึงข้างต้นโดย Diego Scaravaggi เพื่อตอบ คำถามที่ถามแล้วสร้างผลลัพธ์ที่ร้องขอตอบ 9 ม. ค. 16 ที่ 0 33. คำตอบของคุณ 2017 Stack Exchange, Inc.
Comments
Post a Comment