Skip to main content

การย้าย ค่าเฉลี่ย ใน 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.AVG Transact-SQL. ALL ใช้การรวม ฟังก์ชันทั้งหมดค่าเริ่มต้นคือ DEISTINCT ระบุว่า AVG จะทำเฉพาะในแต่ละอินสแตนซ์ที่ไม่ซ้ำกันของค่าโดยไม่คำนึงถึงกี่ครั้งที่ค่าที่เกิดขึ้นการตีความหมายถึงการแสดงออกของตัวเลขที่แน่นอนหรือโดยประมาณ ประเภทข้อมูลประเภทตัวเลขยกเว้นประเภทข้อมูลบิตไม่รวมฟังก์ชันและ subqueries ที่ไม่ได้รับการแบ่งพาร์ติชันโดยการระบุโดยพาร์ทิชัน FROM จะแบ่งชุดผลลัพธ์ที่สร้างขึ้นโดยอนุประโยค FROM ไปยังพาร์ทิชันที่ใช้ฟังก์ชันถ้าไม่ได้ระบุฟังก์ชันจะถือว่าแถวทั้งหมดของ ผลการค้นหาชุดเป็น orderbyclause กลุ่มเดียวกำหนดลำดับตรรกะในการดำเนินการที่จะดำเนินการ orderbyclause เป็นสิ่งจำเป็นสำหรับข้อมูลเพิ่มเติมให้ดูที่มากกว่าข้อ Transact-SQL ชนิดการส่งคืนจะถูกกำหนดโดยประเภทของผลการประเมินจากประเภท expression. decimal p, s ถ้าชนิดข้อมูลของนิพจน์เป็นชนิดข้อมูลนามแฝงชนิดข้อมูลคืนจะเป็นประเภทข้อมูลนามแฝงด้วยอย่างไรก็ตามหากมีการเลื่อนประเภทข้อมูลฐานข้อมูลของประเภทข้อมูลนามแฝงตัวอย่างเช่นจาก tinyint ไปจนถึง int ค่าที่ส่งคืน เป็นชนิดข้อมูลที่ได้รับการประชาสัมพันธ์ไม่ใช่ประเภทข้อมูลนามแฝงค่าเฉลี่ยของชุดค่าโดยคำนวณยอดรวมของค่าเหล่านี้ด้วยการนับค่าที่ไม่ใช่ค่า if ผลรวมเกินกว่าค่าสูงสุดสำหรับชนิดข้อมูลของค่าที่ส่งคืนข้อผิดพลาดจะถูกส่งคืน AVG เป็นฟังก์ชัน deterministic เมื่อใช้โดยไม่ต้องโอเวอร์และคำสั่ง ORDER BY มันเป็น nondeterministic เมื่อระบุด้วยโอเวอร์และคำสั่ง ORDER BY สำหรับข้อมูลเพิ่มเติม, โปรดดูที่ฟังก์ชัน Deterministic และ Nondeterministic A การใช้ฟังก์ชัน SUM และ AVG สำหรับการคำนวณตัวอย่างต่อไปนี้คำนวณชั่วโมงในวันหยุดเฉลี่ยและจำนวนชั่วโมงการลาป่วยที่รองประธานของ Adventure Works Cycles เคยใช้งานแต่ละฟังก์ชันสรุปรวม ค่าสำหรับแถวที่ดึงข้อมูลทั้งหมดตัวอย่างใช้ฐานข้อมูล AdventureWorks2012

Comments