Wednesday, 5 July 2017

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


ฉันกำลังทำงานกับ SQL Server 2008 R2 พยายามคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับแต่ละระเบียนในมุมมองของฉันฉันต้องการรวบรวมค่าของระเบียนก่อนหน้า 250 รายการและคำนวณค่าเฉลี่ยสำหรับคอลัมน์ที่เลือกนี้คอลัมน์มุมมองของฉันมีดังนี้.TransactionID ไม่ซ้ำกันสำหรับ TransactionID แต่ละรายการฉันต้องการคำนวณค่าเฉลี่ยสำหรับค่าของคอลัมน์มากกว่า 250 ระเบียนก่อนหน้าดังนั้นสำหรับ TransactionID 300 ให้เก็บค่าทั้งหมดจากมุมมอง 250 แถวก่อนหน้านี้จะถูกจัดเรียงตามลำดับจากมากไปน้อย TransactionID จากนั้นในคอลัมน์ MovAvg จะเขียนผลลัพธ์ของ ค่าเฉลี่ยของค่าเหล่านี้ฉันกำลังมองหาเพื่อเก็บรวบรวมข้อมูลภายในช่วงของ records. asked 28 ตุลาคม 14 ที่ 20 58. ฉันพยายามที่จะมีคอลัมน์เฉลี่ยที่ใช้ในคำสั่ง SELECT ขึ้นอยู่กับคอลัมน์จาก n แถวก่อนหน้าใน SELECT เดียวกัน งบเฉลี่ยที่ฉันต้องการจะขึ้นอยู่กับ n แถวก่อนหน้าใน resultset แถว 3 แถวแรกของคอลัมน์ Average เป็น null เนื่องจากไม่มีแถวก่อนหน้าแถวที่ 4 ในคอลัมน์ Average แสดงค่าเฉลี่ยของ Number co. lumn จากก่อนหน้า 3 rows. I ต้องการความช่วยเหลือบางพยายามสร้างคำสั่ง SQL เลือกที่จะทำนี้เข้าร่วมด้วยตนเองง่ายๆจะดูเหมือนจะดีขึ้นกว่าการอ้างอิงแถว subquery. Generate 10k แถวของข้อมูลการทดสอบฉันจะดึง กรณีพิเศษของ 3 แถวแรกออกจากแบบสอบถามหลักคุณสามารถ UNION ALL กลับในหากคุณต้องการในชุดแถวเองเข้าร่วมแบบสอบถามในเครื่องของฉันนี้ใช้เวลาประมาณ 10 วินาทีวิธีการ subquery ที่ Aaron Alton แสดงให้เห็นใช้เวลา ประมาณ 45 วินาทีหลังจากที่ฉันเปลี่ยนไปเพื่อแสดงตารางแหล่งข้อมูลทดสอบของฉันหากคุณตั้งค่าสถิติข้อมูลสถิติไว้คุณสามารถเห็นการรวมตัวเองมีการดำเนินการ 10k ในสปูลล์ตารางข้อความค้นหาย่อยมีการดำเนินการ 10K ในตัวกรองรวมและขั้นตอนอื่น ๆ. 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

No comments:

Post a Comment