การย้าย ค่าเฉลี่ย ใน sql 2008


ฉันกำลังทำงานกับ SQL Server 2008 R2 พยายามคำนวณค่าเฉลี่ยเคลื่อนที่สำหรับแต่ละระเบียนในมุมมองของฉันฉันต้องการรวบรวมค่าของระเบียนก่อนหน้า 250 รายการและคำนวณค่าเฉลี่ยสำหรับคอลัมน์ที่เลือกนี้คอลัมน์มุมมองของฉันมีดังนี้.TransactionID ไม่ซ้ำกันสำหรับ TransactionID แต่ละรายการฉันต้องการคำนวณค่าเฉลี่ยสำหรับค่าของคอลัมน์มากกว่า 250 ระเบียนก่อนหน้าดังนั้นสำหรับ TransactionID 300 ให้เก็บค่าทั้งหมดจากมุมมอง 250 แถวก่อนหน้านี้จะถูกจัดเรียงตามลำดับจากมากไปน้อย TransactionID จากนั้นในคอลัมน์ MovAvg จะเขียนผลลัพธ์ของ ค่าเฉลี่ยของค่าเหล่านี้ฉันต้องการเก็บข้อมูลภายในช่วง records. asked Oct 28 14 ที่ 20 58.This เป็น Evergreen Joe Celko คำถามฉันไม่สนใจที่ใช้แพลตฟอร์ม DBMS แต่ในกรณีใด Joe สามารถตอบมากกว่า 10 ปีที่ผ่านมากับมาตรฐาน SQL. Joe Celko SQL ปริศนาและคำตอบอ้างอิงที่พยายามปรับปรุงครั้งล่าสุดแสดงให้เห็นว่าเราสามารถใช้คำกริยาในการสร้างแบบสอบถามที่จะให้เรา moving average. s เป็นคอลัมน์พิเศษหรือแบบสอบถาม ap แบบสอบถามเป็นเทคนิคที่ดีกว่าเพราะวิธีการ UPDATE จะ denormalize ฐานข้อมูล แต่ถ้าข้อมูลทางประวัติศาสตร์ที่ถูกบันทึกไว้จะไม่เปลี่ยนแปลงและการคำนวณค่าเฉลี่ยเคลื่อนที่มีราคาแพงคุณอาจพิจารณาใช้วิธีคอลัมน์ SQL แบบสอบถามปริศนา SQL ทั้งหมด หมายถึงเครื่องแบบคุณเพียงแค่โยนไปยังถังน้ำหนักที่เหมาะสมขึ้นอยู่กับระยะทางจากจุดเวลาปัจจุบันเช่นน้ำหนัก 1 สำหรับจุดข้อมูลภายใน 24 ชั่วโมงจากน้ำหนักจุดข้อมูลปัจจุบัน 0 5 สำหรับจุดภายใน 48hrs กรณีนี้มีความสำคัญเท่าไรจุดติดต่อกันเช่น 6 12 น. 11 48pm อยู่ไกลจากกันกรณีการใช้งานที่ฉันสามารถคิดจะพยายามที่จะเรียบ histogram ที่ datapoints ไม่หนาพอ msciwoj 27 พฤษภาคม 15 ที่ 22 22.I m ไม่แน่ใจว่าผลลัพธ์ที่คาดหวังของคุณแสดงให้เห็นถึงการเคลื่อนย้ายง่ายคลาสสิกง่าย เฉลี่ย 3 วันตัวอย่างเช่นสามหมายเลขแรกตามคำจำกัดความให้ แต่คุณคาดหวัง 4 360 และเกิดความสับสนอย่างไรก็ตามฉันขอแนะนำ โซลูชันต่อไปนี้ซึ่งใช้ AVG หน้าต่างฟังก์ชันวิธีนี้มีประสิทธิภาพมากขึ้นชัดเจนและทรัพยากรน้อยกว่า SELF-JOIN แนะนำในคำตอบอื่น ๆ และฉันประหลาดใจที่ไม่มีใครได้ให้ทางออกที่ดีกว่าคุณเห็นว่า AVG ถูกห่อหุ้มด้วย กรณีที่ rownum แล้วบังคับ NULL s ในแถวแรกที่ 3 วัน Moving Average มีความหมาย. ตอบ 23 กุมภาพันธ์ 16 ที่ 13 12 เราสามารถใช้วิธี Celco สกปรกซ้าย Joe Celko ตามที่อ้างถึงข้างต้นโดย Diego Scaravaggi เพื่อตอบคำถามเป็น ถูกถามแล้วสร้างผลลัพธ์ที่ต้องการตอบ 9 ม. ค. 16 ที่ 0 33. คำตอบของคุณ 2017 Stack Exchange, Inc. ตามคำอธิบายของคุณคุณมีเมทริกซ์ในรายงานของคุณตอนนี้คุณต้องการคำนวณมูลค่าเฉลี่ยของ 6 เดือนที่ผ่านมา Right. In Reporting Service เราสามารถใส่โค้ดที่กำหนดเองลงในรายงานเพื่อจัดการกับตรรกะที่ซับซ้อนเพิ่มแถวคอลัมน์อีกหนึ่งแถวภายในกลุ่มและเรียกใช้ฟังก์ชันที่กำหนดไว้ในโค้ดที่กำหนดเองสำหรับความต้องการของคุณเราได้ปรับเปลี่ยนโค้ด Robert เพื่อให้บรรลุเป้าหมายเราได้ทดสอบกรณีของคุณแล้ว ใน สภาพแวดล้อมท้องถิ่นของเราด้วยตัวอย่างข้อมูลนี่เป็นขั้นตอนและภาพหน้าจอสำหรับการอ้างอิงของคุณวางรหัสที่กำหนดเองลงในรายงานส่วนตัวคิวความยาวเป็นจำนวนเต็ม 6 คิวส่วนตัว As เป็นคู่ 0 คิวส่วนตัวเป็นแบบบูลีนเท็จ idChange ส่วนตัวเป็นสตริงคิวมมเป็นจำนวนเต็มใหม่ฟังก์ชันสาธารณะ CumulativeQueue ByVal currentValue As Integer, id As String As Dim Object ลบออกเป็น Double 0 ถ้า idChange id แล้ว ClearQueue idChange id queueSum 0 queueFull False CumulativeQueue currentValue id Else ถ้าคิวความยาวแล้วลบออกค่าสิ้นสุดถ้าคิวคิวปัจจุบันคิววลี - removeValue ถ้า queueLength แล้วส่งกลับ Nothing ElseIf queueLength และ queueFull False จากนั้น queue คิว True return true คิวอนุกรมคิวความยาวอื่น ๆ Return queueSum queueLength End ถ้า End If End Function ฟังก์ชันสาธารณะ ClearQueue Dim i เป็น Integer Dim n เป็น Integer สำหรับในไปยัง 0 Step-1 next i End function เพิ่มอีกหนึ่งแถวภายในกลุ่มเรียกใช้ฟังก์ชัน กำหนดไว้ในโค้ดที่กำหนดเองบันทึกและดูตัวอย่างด้านล่างถ้าคุณมีคำถามใด ๆ คุณสามารถใช้ฟังก์ชัน RunningValue สำหรับสิ่งนี้ได้เช่นด้านล่างโปรดทำเครื่องหมายว่าเป็นคำตอบถ้าช่วยแก้ปัญหานี้ได้ ปัญหา Visakh ตามคำอธิบายของคุณคุณมีเมทริกซ์ในรายงานของคุณตอนนี้คุณต้องการคำนวณค่าเฉลี่ยของ 6 เดือนที่ผ่านมา Right. In บริการรายงานเราสามารถใส่รหัสที่กำหนดเองลงในรายงานเพื่อจัดการกับตรรกะที่ซับซ้อนเพิ่มแถวคอลัมน์เพิ่มเติม ภายในกลุ่มและเรียกใช้ฟังก์ชันที่กำหนดไว้ในรหัสที่กำหนดเองสำหรับความต้องการของคุณเราปรับเปลี่ยนรหัส Robert เพื่อให้บรรลุเป้าหมายเราได้ทดสอบกรณีของคุณในสภาพแวดล้อมท้องถิ่นของเราด้วยตัวอย่างข้อมูลนี่คือขั้นตอนและภาพหน้าจอสำหรับการอ้างอิงของคุณใส่รหัสที่กำหนดเองลงในรายงานส่วนตัว queueLength As Integer 6 QueueSum ส่วนตัวเป็น Asynchronous 0 Private QueueFull As Boolean False Private idChange เป็น String Dim Queue As New Integer ฟังก์ชันสาธารณะ CumulativeQueue ByVal currentValue เป็นจำนวนเต็ม id As String เป็น Object Dim removedValue As Double 0 ถ้า idChange id แล้ว ClearQueue idChange id queueSum 0 queueFull False CumulativeQueue currentValue id Else If queueLength แล้ว removeValue End If queueSum currentValue queueSum - removedValue ถ้า queueLength แล้วส่งกลับ Nothing ElseIf queueLength และ queueFull False แล้ว queueFull True return queueSum queueLength Else Return queueSum queueLength End If End If End Function ฟังก์ชั่นพับลิก ClearQueue Dim i เป็น Integer Dim n เป็น Integer สำหรับในไปยัง 0 Step-1 next i End function เพิ่มอีกหนึ่งแถวภายในกลุ่มเรียกใช้ฟังก์ชันที่กำหนดไว้ในโค้ดที่กำหนดเองบันทึกและดูตัวอย่าง ถ้าคุณมีคำถามใด ๆ โปรดอย่าลังเลที่จะถามด้วยความนับถือ Simon Hou Pactera วันพุธที่ 14 พฤษภาคม 2014 12 36 PM ไมโครซอฟท์กำลังทำการสำรวจออนไลน์เพื่อทำความเข้าใจความคิดเห็นของคุณเกี่ยวกับ Technet หากคุณเลือก เพื่อเข้าร่วมการสำรวจออนไลน์จะนำเสนอแก่คุณเมื่อคุณออกจากเว็บไซต์ Technet คุณต้องการเข้าร่วม 2017 Microsoft สงวนลิขสิทธิ์

Comments

Popular posts from this blog

ศูนย์ ล่าช้า เฉลี่ยเคลื่อนที่ ตัวบ่งชี้

ฟรี forex แนวโน้ม บ่งชี้ mt4

อะไร เป็น ที่ ที่ดีที่สุด ตัวเลือก การซื้อขาย ที่ปรึกษา บริการ