Saturday, October 15, 2016

Bewegende Gemiddelde Sql

Ek is besig met SQL Server 2008 R2, probeer om 'n bewegende gemiddelde te bereken. Vir elke rekord in my mening, sou ek graag die waardes van die 250 vorige rekords in te samel, en bereken dan die gemiddelde vir hierdie seleksie. My mening kolomme is soos volg: TransactionID is uniek. Vir elke TransactionID. Ek wil graag die gemiddelde vir waarde kolom bereken, oor die vorige 250 rekords. So vir TransactionID 300, versamel al waardes van die vorige 250 rye (siening word gesorteer dalende deur TransactionID) en dan in kolom MovAvg skryf die resultaat van die gemiddeld van hierdie waardes. Ek is op soek na data in te samel binne 'n verskeidenheid van rekords. gevra 28 Oktober 14 aan 20: 58This is 'n immergroen Joe Celko vraag. Ek ignoreer wat DBMS platform gebruik word. Maar in elk geval Joe was in staat om meer as 10 jaar gelede antwoord met standaard SQL. Joe Celko SQL Puzzles en Antwoorde aanhaling: Daardie laaste update poging dui daarop dat ons die gesegde kan gebruik om 'n navraag wat vir ons 'n bewegende gemiddelde sou gee te bou: Is die ekstra kolom of die navraag benadering beter Die navraag is tegnies beter omdat die werk benadering denormalize die databasis. Maar, as die historiese data aangeteken is nie van plan om te verander en die berekening van die bewegende gemiddelde is duur, kan jy oorweeg om die benadering kolom. SQL legkaart navraag: deur al beteken uniform. Jy gooi net om die toepaslike gewig emmer, afhangende van die afstand vanaf die huidige tyd punt. Byvoorbeeld quottake weight1 vir datapunte binne 24 uur van die huidige datapoint weight0.5 vir datapunte binne 48hrsquot. Daardie geval is dit sake hoeveel opeenvolgende datapunte (soos 06:12 en 23:48) is ver van mekaar 'n gebruik geval ek kan dink sou 'n poging om die histogram waar datapunte is nie dig genoeg uitvoering maak msciwoj 27 Mei 15 stryk op wees 22:22 Ek is nie seker dat jou verwagte resultaat (uitset) toon klassieke eenvoudige bewegende (rollende) gemiddeld vir 3 dae. Omdat, byvoorbeeld, die eerste trippel van getalle per definisie gee, maar jy verwag 4,360 en sy verwarrend. Nietemin, ek stel voor die volgende oplossing, wat venster-funksie AVG gebruik. Hierdie benadering is baie meer doeltreffend (duidelik en minder hulpbron-intensiewe) as self aansluit bekendgestel in ander antwoorde (en Im verbaas dat niemand 'n beter oplossing gegee). Jy sien dat AVG is toegedraai met geval wanneer ROWNUM GT p. days dan NULL s dwing in die eerste rye, waar 3 daagse bewegende gemiddelde is betekenisloos. Hy antwoord 23 Februarie by 13:12 Ons kan aansoek doen Joe Celkos vuil links buitenste deel metode (soos hierbo aangehaal deur Diego Scaravaggi) om die vraag te beantwoord soos dit gevra is. Genereer die versoek afvoer: geantwoord 9 Januarie by 00:33 Jou Antwoord 2016 stapel Exchange, IncHow 'n SQL Bereken bewegende gemiddelde sonder 'n wyser Update: As jy besig is met die nuutste weergawes van SQL Server, kan jy die windows funksies gebruik om te bereik dieselfde ding. Ek gepos word om die updated kode aan die einde van die post. Om hierdie video, ek nog graag die denkproses van anker om 'n datum. Video: 3 daagse bewegende gemiddelde in SQL 'n doeltreffende manier om 'n bewegende gemiddelde in SQL te bereken met behulp van 'n paar truuks op datum ankers stel. Daar is debatte oor die beste manier om 'n SQL bewegende gemiddelde in SQL Server doen. Sommige mense dink daar is tye wanneer 'n wyser is mees doeltreffende. Ander dink dat jy dit alles kan doen in 'n stel wat gebaseer is weg sonder die wyser. Die ander dag het ek gaan 'n bewegende gemiddelde te bereken en my eerste gedagte was om 'n wyser gebruik. Ek het 'n paar vinnige navorsing en het gevind dat hierdie forum vraag: Moving Gemiddelde in TSQL Daar is 'n pos wat 'n subquery met 'n anker datum te help vind die 1 en 2 dag geneutraliseer toon. Hier is die skrif wat jy kan gebruik om die 3 dag SQL Gemiddeld finale uitslag Moving toets. Hier is die finale navraag. Hier is die vraag wat jy sou gebruik met SQL Server 2012. Deel hierdie: SQL Server T-SQL-kode om 'n bewegende gemiddelde te bereken deur: Dallas Snider Lees Kommentaar Verwante Wenke: Meer funksies - Gebruiker-gedefinieerde UDF Probleem Hoe kan ek die data in 'n gladde kolom met 'n bewegende gemiddelde in T-SQL kan jy asseblief loop deur 'n voorbeeld in SQL Server met T-SQL-kode Hoe kan ons die geldigheid van die resultate Oplossing tydreeksdata kan inherent lawaaierige en 'n goeie manier wees om uit te stryk die data is bereken 'n bewegende gemiddelde. Daar is 'n aantal maniere om 'n bewegende gemiddelde in T-SQL bereken, maar in hierdie punt sal ons kyk na 'n manier om 'n bewegende gemiddelde wat die gemiddelde venster x aantal rye agter en x aantal rye stel voor die stroom te bereken data ry. Die voordeel hiervan is dat daar geen vertraging in die gemiddelde waarde teruggekeer en die bewegende gemiddelde waarde is op dieselfde ry met sy huidige waarde. Kom ons begin deur die skep van 'n tafel en laai 'n paar data met behulp van onder die T-SQL. Ons het 361 datapunte wat 'n lawaaierige sinusgolf te skep. Na die laai van die data, sal ons die volgende T-SQL-kode uit te voer om al die kolomme kies saam met die bewegende gemiddelde waarde. In die onderstaande kode, die bewegende gemiddelde venster grootte is 15 (7 rye die huidige ry voorafgaande, plus die huidige ry, plus die 7 volgende rye). Die bewegende gemiddelde van die kolom DataValue teruggestuur as die kolom MovingAverageWindowSize15. Die ORDER BY klousule is uiters belangrik om die data in die behoorlike gesorteerde volgorde hou. Ons kan kopieer en plak die resultate in Excel om die geldigheid van die berekening korrek is. In die onderstaande beeld, die venster begin in sel C3 en eindig by C17. Die bewegende gemiddelde bereken deur die T-SQL in hierdie punt lyk in sel D10. Die gemiddelde bereken deur Excel is aan die onderkant en dit is gelykstaande aan die waarde in D10. In die onderstaande figuur is, kan ons die oorspronklike data waardes geplot in blou met die bewegende gemiddelde in rooi gestip sien. Volgende stappe Eers die grootte van die bewegende gemiddelde venster om te sien hoe die plot verander. Maak ook seker dat jy check die ander wenke oor T-SQL uit mssqltips: Laaste wysiging: 08/03 / 2016How te bereken bewegende gemiddeldes Voer die volgende T-SQL script in Microsoft SQL Server Management Studio Query Editor om die 2 maande bereken bewegende gemiddeldes op die aantal verkopers verskaffing fiets dele te AdventureWorks Cycles, 'n fiktiewe bergfiets vervaardiger: - T-SQL 60-dae - bewegende gemiddelde berekening GEBRUIK AdventureWorks2008 verklaar VendorsByMonth Table (... Volgorde int Jaar int Maand int UniqueVendors int) INSERT VendorsByMonth KIES ROWNUMBER () oor (ORDER BY jaar (datum waarop u bestel), maand (datum waarop u bestel)), jaar (datum waarop u bestel), maand (datum waarop u bestel), 0 van die aankoop. PurchaseOrderHeader GROEP jaar (datum waarop u bestel), maand (datum waarop u bestel) Ek verklaar int het ek 2 TERWYL (i LT (Kies 'n maksimum (Volgorde) VAN VendorsByMonth)) Begin UPDATE m SET m. UniqueVendors (Kies telling (afsonderlike VendorID) van die aankoop. PurchaseOrderHeader pOH waar m. Jaar Jaar (pOH. Datum waarop u bestel) en m. Maand Maand (pOH. Datum waarop u bestel) OR LP. Jaar Jaar (pOH. Datum waarop u bestel) en LP. Maand Maand (pOH . datum waarop u bestel)) VAN VendorsByMonth m CROSS JOIN VendorsByMonth LP waar m. Volgorde i en LP. Volgorde i - 1 stel II 1 Einde - TERWYL kies uit VendorsByMonth ORDER BY volgorde GO / volgorde Jaar Maand UniqueVendors 1 2001 5 0 2 2002 1 28 3 2002 2 64 4 2002 3 68 5 2002 4 64 6 2002 5 56 7 2002 6 20 8 2002 7 48 9 2002 8 52 10 2002 9 36 11 2002 10 48 12 2002 11 44 ​​13 2003 3 40 14 2003 5 56 15 2003 6 79 16 2003 7 68 17 2003 8 24 18 2003 9 79 19 2003 10 79 20 2003 11 79 21 2003 12 82 22 2004 1 82 23 2004 2 81 24 2004 3 82 25 2004 4 81 26 2004 5 81 27 2004 6 81 28 2004 7 81 29 2004 8 81 30 2004 9 79 31 2004 10 49


No comments:

Post a Comment