ฉันกำลังทำงานกับ SQL Server 2008 R2 พยายามคำนวณค่าเฉลี่ยเคลื่อนที่ สำหรับแต่ละเร็กคอร์ดในมุมมองของฉันฉันต้องการรวบรวมข้อมูลจาก 250 ระเบียนก่อนหน้าและคำนวณค่าเฉลี่ยสำหรับการเลือกนี้ คอลัมน์มุมมองของฉันมีดังนี้: TransactionID ไม่ซ้ำกัน สำหรับแต่ละ TransactionID ฉันต้องการคำนวณค่าเฉลี่ยสำหรับค่าของคอลัมน์มากกว่า 250 ระเบียนก่อนหน้า ดังนั้นสำหรับ TransactionID 300 ให้เก็บค่าทั้งหมดจากแถวก่อนหน้า 250 แถว (มุมมองจะเรียงลำดับจากมากไปน้อยโดย TransactionID) จากนั้นในคอลัมน์ MovAvg จะเขียนค่าเฉลี่ยของค่าเหล่านี้ ฉันต้องการรวบรวมข้อมูลภายในช่วงระเบียน ถาม 28 ต. ค. ที่ 20 ที่ 58: ใช้ค่าเฉลี่ยเคลื่อนที่ที่เรียบเพื่อให้ข้อมูลที่ราบรื่นเป็นเทคนิคที่ได้รับความนิยมอย่างมาก เลวร้ายมากตัวอย่างหลักใน SQL Anywhere Help อยู่ห่างไกลจากง่ายสิ่งที่ทำให้ตัวอย่างนั้นมีความซับซ้อนนอกจากคำแถลงปัญหานั่นคือคำนวณค่าเฉลี่ยเคลื่อนที่ของยอดขายผลิตภัณฑ์ทั้งหมดโดยเดือนในปี 2000 นี่เป็นสิ่งที่ทำให้ มันซับซ้อน: สองอ้างอิงถึง AVG () ฟังก์ชัน GROUP BY (ซึ่งทั้งหมดด้วยตัวเองทำให้เพียงเกี่ยวกับการเลือกหัว - scratcher), คำสั่ง WINDOW WINDOW WINDOW ประโยคที่ไม่ได้ใช้คำหลัก WINDOW (คนที่ต้องการตัวอย่างมากกว่าคนอื่น) ไม่ชัดเจนว่าหน้าต่างมีส่วนเกี่ยวข้องที่ทั้งหมด ไม่เพียงแค่คำสั่ง WINDOW ใดก็ตามคุณ แต่คุณสามารถใส่รหัสลงใน WINDOW: PARTITION BY, RANGE clause ได้ ไม่ใช่ประโยค ROWS แบบง่ายๆ แต่เป็นประโยค RANGE แบบเต็มรูปแบบซึ่งเป็นความสัมพันธ์ที่ใกล้ชิดกับ ORDER BY ฉันรู้ว่าแถวเป็นอย่างไร แต่สิ่งที่ redacted คือ RANGE แต่รอเอาไว้มากขึ้น: การเลือก RANGE เหนือ ROWS ในตัวอย่างนี้มีความสำคัญต่อการดำเนินการที่ถูกต้องของ Query (สำหรับการอภิปรายอย่างสมบูรณ์มากขึ้นเกี่ยวกับตัวอย่างเฉพาะนี้ดูตัวอย่างที่ 23 - การคำนวณค่าเฉลี่ยเคลื่อนที่ในกระดาษสีขาวของ OLAP ที่ Glenn Paulleys เยี่ยมยอด) ตอนนี้ให้กลับมาทำงานได้อีกครั้ง: ค่าเฉลี่ยที่แท้จริงในการเคลื่อนย้ายได้ง่ายตัวอย่างต่อไปนี้แสดงมูลค่า 10 วัน ข้อมูลพร้อมกับค่าเฉลี่ยเคลื่อนที่ของค่าในปัจจุบันและวันวาน: คำสั่ง WINDOW ในบรรทัดที่ 21 ถึง 23 กำหนดย้ายหน้าต่างที่ประกอบด้วยแถวสองแถวแถวปัจจุบัน (CURRENT ROW) และแถวเมื่อวาน (1 PRECEDING): คำสั่ง WINDOW ORDER BY กำหนดว่าอะไร PRECEDING หมายถึง (แถวก่อนโดย t. entrydate) และประโยค ROWS กำหนดขนาดของหน้าต่าง (เสมอสองแถว) นิพจน์ AVG (t. value) เมื่อวันที่ twodays ในบรรทัดที่ 19 อ้างถึงคำว่า WINDOW ตามชื่อและจะบอก SQL Anywhere เพื่อคำนวณค่าเฉลี่ยของค่าทั้งสองค่าของ t. value ที่มีอยู่ในหน้าต่างเลื่อน 2 แถวสำหรับแต่ละ แถวในชุดผลลัพธ์ ดังนั้นสำหรับ 2012-02-02 เฉลี่ย 10 และ 20 คือ 15.000000 สำหรับ 2012-02-03 เฉลี่ย 20 และ 10 เป็น 15.000000 สำหรับ 2012-02-04 เฉลี่ย 10 และ 30 เป็น 20.000000 สำหรับ 2012- 02-10 เฉลี่ย 10 และ 60 เท่ากับ 35.000000 โอ๊ะสิ่งที่เกี่ยวกับแถวแรกแถว 2012-02-01 ไม่ได้มีแถว PRECEDING ดังนั้นค่าเฉลี่ยในหน้าต่างเคลื่อนที่ตามกระดาษสีขาว Glenn Paulleys ในกรณีของหน้าต่างที่เคลื่อนที่จะสันนิษฐานว่าแถวที่มี Null ค่าอยู่ก่อนแถวแรกและหลังจากแถวสุดท้ายในการป้อนข้อมูล นั่นหมายความว่าเมื่อหน้าต่างเคลื่อนย้ายมีวันที่ 2012-02-01 เป็น CURRENT ROW แถวที่ 1 PRECINGING มีค่าเป็น NULL และเมื่อ SQL Anywhere คำนวณ AVG () ที่มีค่า NULL จะไม่นับ NULL เลย ไม่ได้อยู่ในตัวเศษหรือในตัวหารเมื่อคำนวณค่าเฉลี่ย Heres หลักฐาน: Thats ทำไม twodayaverage 10.000000 สำหรับแถวแรก 2012-02-01 เขียนโดย Breck Carter เวลา 3:47 PMMoving average ใน T-SQL การคำนวณโดยทั่วไปในการวิเคราะห์แนวโน้มคือค่าเฉลี่ยเคลื่อนที่ (หรือกลิ้ง) ค่าเฉลี่ยเคลื่อนที่คือค่าเฉลี่ยของตัวอย่างเช่น 10 แถวล่าสุด ค่าเฉลี่ยเคลื่อนที่แสดงเส้นโค้งที่ราบรื่นกว่าค่าจริงมากขึ้นโดยมีระยะเวลายาวนานกว่าสำหรับค่าเฉลี่ยเคลื่อนที่ซึ่งเป็นเครื่องมือที่ดีสำหรับการวิเคราะห์แนวโน้ม โพสต์บล็อกนี้จะแสดงวิธีการคำนวณค่าเฉลี่ยเคลื่อนที่ใน T-SQL วิธีต่างๆจะใช้ขึ้นอยู่กับรุ่นของ SQL Server กราฟด้านล่างแสดงให้เห็นถึงผลการปรับให้เรียบ (เส้นสีแดง) โดยมีค่าเฉลี่ยเคลื่อนที่ 200 วัน ราคาหุ้นเป็นเส้นสีน้ำเงิน แนวโน้มในระยะยาวสามารถมองเห็นได้ชัดเจน T-SQL Moving Avergage 200 วันการสาธิตด้านล่างนี้ต้องการฐานข้อมูล TAdb ที่สามารถสร้างขึ้นพร้อมกับสคริปต์ที่อยู่ที่นี่ ในตัวอย่างที่จะเกิดขึ้นเราจะคำนวณค่าเฉลี่ยเคลื่อนที่ในช่วง 20 วันที่ผ่านมา ขึ้นอยู่กับรุ่นของ SQL Server จะมีวิธีการอื่นในการคำนวณ และตามที่เราจะเห็นในภายหลัง SQL Server รุ่นใหม่มีฟังก์ชันที่ช่วยให้การคำนวณมีประสิทธิภาพมากขึ้น SQL Server 2012 และรุ่นที่ใหม่กว่า Moving Average รุ่นนี้ใช้ฟังก์ชันหน้าต่างรวม Whats ใหม่ใน SQL 2012 คือความเป็นไปได้ที่จะ จำกัด ขนาดของหน้าต่างโดยการระบุว่าแถวก่อนหน้าหน้าต่างควรประกอบด้วย: แถวก่อนเป็น 19 เพราะเราจะรวมแถวปัจจุบันเช่นกันในการคำนวณ อย่างที่คุณเห็นการคำนวณค่าเฉลี่ยเคลื่อนที่ใน SQL Server 2012 ทำได้ง่ายมาก รูปด้านล่างนี้แสดงให้เห็นถึงหลักการของ windowing แถวปัจจุบันมีเครื่องหมายสีเหลือง หน้าต่างถูกทำเครื่องหมายด้วยพื้นหลังสีน้ำเงิน ค่าเฉลี่ยเคลื่อนที่เป็นค่าเฉลี่ยของ QuoteClose ในบรรทัดสีน้ำเงิน: หน้าต่างการย้ายโดยเฉลี่ยของ T-SQL ผลลัพธ์ของการคำนวณใน SQL Server รุ่นเก่าจะเหมือนกันดังนั้นจะไม่มีการแสดงอีกครั้ง SQL Server 2005 8211 2008R2 Moving Average รุ่นนี้ใช้นิพจน์ตารางร่วมกัน CTE มีการอ้างถึงตนเองเพื่อรับแถว 20 แถวสุดท้ายสำหรับแต่ละแถว: ค่าเฉลี่ยก่อนย้าย SQL Server 2005 รุ่นก่อนปี 2005 จะใช้การรวมด้านซ้ายที่ด้านซ้ายไปยังตารางเดียวกันเพื่อรับแถวสุดท้าย 20 แถว ตารางด้านนอกสามารถกล่าวได้ว่ามีหน้าต่างที่เราต้องการคำนวณโดยเฉลี่ยเมื่อ: การเปรียบเทียบประสิทธิภาพหากเราใช้วิธีการที่แตกต่างกันสามแบบพร้อมกันและตรวจสอบแผนการดำเนินงานที่เกิดขึ้นมีความแตกต่างอย่างมากในประสิทธิภาพระหว่างวิธีการ: การเปรียบเทียบสาม วิธีการต่างๆในการคำนวณค่าเฉลี่ยเคลื่อนที่ในขณะที่คุณสามารถดูได้การปรับปรุงฟังก์ชัน windowing ใน SQL 2012 จะทำให้ประสิทธิภาพในการทำงานแตกต่างกันมาก ดังที่ได้กล่าวไว้ในตอนต้นของบทความนี้การย้ายค่าเฉลี่ยจะใช้เป็นเครื่องมือในการอธิบายแนวโน้ม วิธีการทั่วไปคือการรวมค่าเฉลี่ยเคลื่อนที่ของความยาวที่ต่างกันเพื่อให้มีการเปลี่ยนแปลงในระยะสั้นระยะกลางและระยะยาวตามลำดับ ความสนใจเป็นพิเศษคือการข้ามเส้นแนวโน้ม ตัวอย่างเช่นเมื่อแนวโน้มระยะสั้นเคลื่อนที่ไปตามแนวโน้มระยะยาวหรือระยะปานกลางสิ่งนี้อาจแปลได้ว่าเป็นสัญญาณซื้อในการวิเคราะห์ทางเทคนิค และเมื่อแนวโน้มระยะสั้นเคลื่อนที่ไปตามเส้นแนวโน้มที่ยาวขึ้นสิ่งนี้สามารถตีความได้ว่าเป็นสัญญาณการขาย แผนภูมิด้านล่างแสดงคำคม Ma20, Ma50 และ Ma200 T-SQL Ma20, Ma50, Ma200 สัญญาณซื้อและขาย โพสต์บล็อกนี้เป็นส่วนหนึ่งของซีรี่ส์เกี่ยวกับการวิเคราะห์ทางเทคนิค TA ใน SQL Server ดูโพสต์อื่นที่นี่ โพสต์โดย Tomas Lind
eBook ฟรีสำหรับ Stock, Forex และการซื้อขายตัวเลือกรัฐบาลสหรัฐฯที่ต้องการคำสงวนสิทธิ์ - Commodity Futures Trading Commission การซื้อขายตราสารทางการเงินใด ๆ รวมทั้งตัวเลือกการซื้อขายล่วงหน้าและหลักทรัพย์มีผลตอบแทนที่เป็นประโยชน์ แต่ยังมีความเสี่ยงที่อาจเกิดขึ้น คุณต้องตระหนักถึงความเสี่ยงและยินดีที่จะยอมรับพวกเขาเพื่อที่จะลงทุนในตลาดหุ้นฟิวเจอร์สและตลาดหุ้น อย่าค้าขายกับเงินที่คุณไม่สามารถจะเสียได้ เว็บไซต์การฝึกอบรมนี้ไม่ใช่การชักชวนหรือเสนอทางเลือก BuySell ฟิวเจอร์สหรือหลักทรัพย์ ไม่ได้มีการระบุว่าข้อมูลใด ๆ ที่คุณได้รับจะเป็นไปได้หรือมีแนวโน้มที่จะบรรลุผลกำไรหรือขาดทุนที่คล้ายคลึงกับข้อมูลที่ได้กล่าวไว้ในเว็บไซต์นี้ ผลการดำเนินงานที่ผ่านมาของระบบการซื้อขายหรือวิธีการใด ๆ ไม่จำเป็นต้องบ่งบอกถึงผลการดำเนินงานในอนาคต กรุณาใช้สามัญสำนึก เว็บไซต์นี้และเนื้อหาทั้งหมดมีวัตถุประสงค์เพื่อการศึกษาและการวิจัยเท่านั้น โปรดรับคำแนะนำจากที่ปรึกษาทางการเงินที่มีอำนาจก่อนที่จะลงทุนเงินในตราสารการเงินใด ๆ NFA และ CTFC ข้อจำกัดความรับผิดชอบที่จำเป็น: การซื้อขายในตลาดเงินตราต่างประเทศเป็นโอกาสที่ท้าทายท...
Comments
Post a Comment