Wednesday 5 July 2017

การย้าย ค่าเฉลี่ย sql เซิร์ฟเวอร์ 2008


ฉันพยายามที่จะมีคอลัมน์เฉลี่ยที่ใช้ในคำสั่ง SELECT ขึ้นอยู่กับคอลัมน์จากแถวก่อนหน้า n ในคำสั่ง SELECT เดียวกันเฉลี่ยที่ฉันต้องการจะขึ้นอยู่กับ n แถวก่อนหน้าใน resultset. The แรก 3 แถวของคอลัมน์เฉลี่ย เป็น null เนื่องจากไม่มีแถวหน้าที่แถว 4 ในคอลัมน์ Average แสดงค่าเฉลี่ยของคอลัมน์ Number จากแถว 3 แถวก่อนหน้านี้ฉันต้องการความช่วยเหลือในการสร้างคำสั่ง SQL Select ที่จะทำแบบนี้ เพื่อให้ได้ผลลัพธ์ที่ดีกว่าการอ้างอิงแถวย่อยสร้างแถว 10k ของข้อมูลการทดสอบฉันจะดึงกรณีพิเศษของแถวแรก 3 แถวออกจากข้อความค้นหาหลักคุณสามารถ UNION ALL กลับเข้ามาหากคุณต้องการในชุดแถว แบบสอบถามแบบสอบถามด้วยตนเองในเครื่องของฉันใช้เวลาประมาณ 10 วินาทีวิธีการแบบสอบถามย่อยที่ Aaron Alton แสดงให้เห็นว่าใช้เวลาประมาณ 45 วินาทีหลังจากที่ฉันเปลี่ยนไปเพื่อให้สะท้อนถึงตารางข้อมูลการทดสอบของฉันหากคุณทำสถิติข้อมูลสถิติไว้คุณสามารถดูการเข้าร่วมด้วยตนเองได้ มี 10k ในการดำเนินการนี้ spool เบ็ดเสร็จมี 10k ดำเนินการในตัวกรองรวมและขั้นตอนอื่น ๆ ฉันกำลังทำงานกับ SQL Server 2008 R2 พยายามคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับแต่ละระเบียนในมุมมองของฉันฉันต้องการเก็บค่าของ 250 ก่อนหน้า บันทึกแล้วคำนวณค่าเฉลี่ยสำหรับการเลือกนี้คอลัมน์มุมมองของฉันมีดังนี้.TransactionIDไม่ซ้ำกันสำหรับแต่ละ TransactionID ฉันต้องการจะคำนวณค่าเฉลี่ยสำหรับค่าของคอลัมน์มากกว่า 250 ระเบียนก่อนดังนั้นสำหรับ TransactionID 300 รวบรวมค่าทั้งหมดจากก่อนหน้า 250 มุมมองแถวจะเรียงลำดับจากมากไปน้อยโดย TransactionID แล้วในคอลัมน์ MovAvg เขียนค่าเฉลี่ยของค่าเหล่านี้ฉันต้องการเก็บข้อมูลภายในช่วงของ records. asked Oct 28 14 at 20 58.Rolling เฉลี่ยใน SQL Server. Aggregate functions are สะดวกในการแก้ปัญหาทางธุรกิจและทำให้การพัฒนาเป็นเรื่องง่าย แต่ความต้องการทางธุรกิจทั้งหมดไม่ง่ายนักแก้ปัญหาได้ง่ายตัวอย่างเช่นค่าเฉลี่ยกลิ้งเฉลี่ยของกลิ้งเฉลี่ย แนวคิดแบบง่ายๆค่าเฉลี่ยคำนวณจากชุดย่อยคงที่ของข้อมูลการคำนวณโดยเฉลี่ยของโรลลิ่งสมักใช้กับข้อมูลชุดข้อมูลแบบเรียลไทม์และช่วยขจัดความผันผวนในระยะสั้นในขณะที่การเน้นค่าสาธารณูปโภคในระยะยาวค่าสาธารณูปโภคมักมีค่าการกลั่นเฉลี่ยของการบริโภคเพื่อช่วยให้ลูกค้าเข้าใจการใช้งาน ผู้บริโภคไม่กังวลเกี่ยวกับการใช้ไฟฟ้าที่สูงในวันหนึ่งเมื่อเดือนสิงหาคมเมื่อมีคลื่นความร้อนที่พวกเขาต้องการเพื่อดูว่าการบริโภคของพวกเขามีการเปลี่ยนแปลงไปอย่างไรตลอดเวลาค่าเฉลี่ยรวมด้วยการแสดงออกของตารางสามัญ 2005 2008 เริ่มต้นกับ SQL Server 2005 เป็นเรื่องง่าย เพื่อเขียนค่าเฉลี่ยกลิ้งในคำสั่ง T-SQL เดียวโดยใช้ Common Table Expression CTEs อย่างรวดเร็วกลายเป็นที่นิยมจำนวนมหาศาลของฟังก์ชันที่ยากลำบากอย่างแปลกประหลาดที่เกิดขึ้นผ่าน CTEs รวมถึงข้อความค้นหาแบบทวนซ้ำและค่าเฉลี่ยของกลิ้งลองดูตัวอย่างนี้ในฐานข้อมูลตัวอย่าง AdventureWorks2012 ในขณะที่วิธีการที่ไม่ซับซ้อนมากที่สุดในการสร้างค่าเฉลี่ยแบบกลิ้ง, CTE จัดการเพื่อให้ได้งานทำในแบบสอบถามนี้เรากำลังใช้ CTE เพื่อสร้างตารางการทำงานและจากนั้นดำเนินการด้วยตนเองเข้าด้วยกันนี้เป็นไปได้โดยใช้ตารางชั่วคราวหรือตัวแปรตาราง แต่ CTE สำเร็จใน หนึ่งคำสั่งและเป็น arguably ง่าย readmon นิพจน์ตารางยังซ่อนความลับมืด SQL Server รันร่างกาย CTE ทุกครั้งที่การแสดงออก CTE, cte ในตัวอย่างนี้มีการอ้างอิงที่ซับซ้อนมากขึ้นการแสดงออกตารางสามัญคือการทำงานมากขึ้นที่มี ที่จะดำเนินการดำเนินการนี้เฉลี่ยกลิ้งกับสถิติ IO เปิดมันง่ายที่จะเห็นการประหารชีวิตหลายในรูปแบบของสองสแกนในแต่ละตารางในฐานข้อมูลขนาดเล็กนี้ doesn t ก่อให้เกิดปัญหาประสิทธิภาพที่สำคัญ แต่จะทำให้เกิดขนาดใหญ่ ปัญหาสำหรับฐานข้อมูลที่มีขนาดปานกลางการคำนวณค่าเฉลี่ยด้วยฟังก์ชันหน้าต่าง 2012 และอื่น ๆ SQL Server 2012 ให้การสนับสนุนที่ดีขึ้นสำหรับฟังก์ชัน windowing แม้ว่าการสนับสนุน OVER มีอยู่แล้วใน SQL Server 2005, SQL Server 2012 brin gs มากฟังก์ชันการทำงานกับตารางโดยใช้ ROW หรือ RANGE ข้อของฟังก์ชัน windowing เป็นไปได้เพื่อลดความซับซ้อนของแบบสอบถามและปรับปรุงประสิทธิภาพดูแม้ว่าทั้งสองแบบสอบถามจะแตกต่างกันอย่างน่าทึ่งแตกต่างที่ใหญ่ที่สุดคือการแนะนำ ROWS 12 PRECEDING นี้จะใช้เวลาสถานที่ของตัวเองเข้าร่วมในตัวอย่างก่อนหน้านี้แทนการเขียนออกร่วมเราเองก็บอก SQL Server ที่เราต้องการเฉลี่ยของ st ในช่วง 12 แถวเรียงตามปีและเดือนผลชนิดนี้ไม่ได้ ในงาน SQL Server ทำการอ่านแทน 369 ครั้งอ่านอย่างเห็นได้ชัดการเปลี่ยนแปลงนี้ทำให้การปรับปรุงประสิทธิภาพที่สำคัญสำหรับ SQL Server เราได้ลดจำนวนการอ่านลดความซับซ้อนของข้อความค้นหาลงเล็กน้อยและทำให้เห็นได้ชัดว่านักพัฒนาซอฟต์แวร์ในอนาคตสามารถทำอะไรได้บ้าง แก้ไขหรือสร้างสิ่งนี้ต่อไปการเปลี่ยนแบบสอบถามใหม่เป็นค่าเฉลี่ยต่อวันแทนที่จะเป็นเดือนเป็นเรื่องง่ายและต้องใช้บรรทัดโค้ดน้อยลง จำนวน e ของตรรกะและทางกายภาพอ่านเป็นค่าเฉลี่ยกลิ้งรายเดือนโดยใช้ฟังก์ชันหน้าต่างที่คุณมีสองวิธีที่แตกต่างกันเพื่อดำเนินการเฉลี่ยกลิ้งใน SQL Server หนึ่งวิธีชัดเจนมากง่ายกว่าที่อื่น ๆ มีจำนวนเพิ่มประสิทธิภาพใน SQL Server 2012 เพื่อให้ง่ายสำหรับคุณในการสร้างฟังก์ชันการทำงานนี้และปรับปรุงประสิทธิภาพของ SQL Server ในเวลาเดียวกันขอบคุณ Jeremiah ตอนนี้ฉันกำลังอยู่ระหว่างการโยกย้ายระบบ 2008R2 ซึ่งคำนวณ SMA EMA MACD ไปยัง SQL 2012 ใช้ R2 s windowing function แต่ต้องใช้ ROWNUMBER และทำคณิตศาสตร์พิเศษนิดหน่อยเนื่องจากไม่มี new 2012 ROWS PRECEDING clause ฉันรัก ROWS PRECEDING ใหม่และประสิทธิภาพจะเร็วขึ้นในปี 2012 กว่าใน R2 ขอบคุณสำหรับตัวอย่าง คุณยินดีต้อนรับขอบคุณสำหรับการแบ่งปันเล็กน้อยเกี่ยวกับกรณีการใช้งานของคุณคุณได้ตีเทคนิคอื่นที่ฉันใช้กับความสำเร็จในระดับปานกลางบางอย่างใน SQL Server 2008R2 และก่อนหน้านี้รวม ROWNUMBER กับกึ่งเข้าร่วมเพื่อดำเนินการ SUM AVG ฯลฯ ฉันหวังว่าคุณ การย้ายข้อมูลทำได้อย่างราบรื่น

No comments:

Post a Comment