Tuesday, October 11, 2016

Bereken Bewegende Gemiddelde Sql

Bewegende gemiddelde in T-SQL n gemeenskaplike berekening tendens analise is die bewegende (of rollende) gemiddelde. 'N bewegende gemiddelde is die gemiddeld van die byvoorbeeld laaste 10 rye. Die bewegende gemiddelde wys 'n meer gladde kurwe as die werklike waardes, meer so met 'n langer tydperk vir die bewegende gemiddelde, maak dit 'n goeie hulpmiddel vir tendens analise. Hierdie blog post sal wys hoe om te bereken bewegende gemiddelde in T-SQL. Verskillende metodes sal gebruik word, afhangende van die weergawe van SQL Server. Die onderstaande grafiek toon die smoothing effek (rooi lyn) met 'n 200 dae bewegende gemiddelde. Die voorraadkwotasies is die blou lyn. Die langtermyn tendens is duidelik sigbaar. T-SQL Moving Avergage 200 dae onderstaande demonstrasie vereis die TAdb databasis wat geskep kan word met die script hier geleë. In die komende voorbeeld sal ons 'n bewegende gemiddelde te bereken vir die afgelope 20 dae. Afhangende van die weergawe van SQL Server, sal daar 'n ander metode om die berekening te doen. En, soos ons later sal sien, die nuwer weergawes van SQL Server het funksies in staat stel 'n baie meer doeltreffende berekening. SQL Server 2012 en later Moving Gemiddelde Hierdie weergawe maak gebruik van 'n totaal venster funksie. Wat is nuut in SQL 2012 is die moontlikheid om die grootte van die venster beperk deur hoeveel rye voor die venster moet bevat: Rye voorafgaande is 19, want ons het die huidige ry sowel in die berekening in te sluit. Soos jy kan sien, die berekening van bewegende gemiddelde in SQL Server 2012 is redelik eenvoudig. Die onderstaande figuur toon die windows beginsel. Huidige ry gemerk met 'n geel. Die venster is gemerk met 'n blou agtergrond. Die bewegende gemiddelde is eenvoudig die gemiddelde van QuoteClose in die blou lyne: T-SQL Moving gemiddelde venster. Die resultate van die berekeninge in ouer weergawes van SQL Server is dieselfde, so hulle sal nie weer gewys word. SQL Server 2005 8211 2008R2 Moving Gemiddelde Hierdie weergawe maak gebruik van 'n gemeenskaplike tafel uitdrukking. Die CTE is self gekla tot die laaste 20 rye vir elke ry te kry: Moving Gemiddelde voor SQL Server 2005 Die pre 2005 weergawe sal 'n links buitenste gebruik te sluit om dieselfde tafel met die laaste 20 rye te kry. Die buitenste tafel kan gesê word dat die venster wat ons wil 'n gemiddelde op te bereken bevat: Performance Vergelijking As ons die drie verskillende metodes gelyktydig hardloop en gaan die gevolglike uitvoering plan, daar is 'n dramatiese verskil in prestasie tussen die metodes: Vergelijking van drie verskillende metodes te bereken bewegende gemiddelde Soos jy kan sien, die windows funksie verbeterings in SQL 2012 maak 'n groot verskil in prestasie. Gebruik Soos in die begin van hierdie post, is bewegende gemiddeldes gebruik as 'n instrument om tendense te illustreer. 'N Algemene benadering is om bewegende gemiddeldes van verskillende lengtes te kombineer, ten einde veranderinge in die kort-, medium - en langtermyn tendense onderskeidelik te sien. Van besondere belang is die kruising van die tendens lyne. Byvoorbeeld, wanneer die kort tendens oor die lang of medium tendens beweeg, dit kan geïnterpreteer word as 'n koopsein in tegniese ontleding. En toe die kort tendens beweeg onder 'n langer tendens lyn, kan dit vertolk word as 'n sell sein. Die onderstaande grafiek toon Kwotasies, Ma20, Ma50 en Ma200. T-SQL Ma20, Ma50, Ma200 koop en verkoop seine. Hierdie blog post is deel van 'n reeks oor tegniese ontleding, TA, in SQL Server. Sien die ander poste hier. Geplaas deur Tomas Lindi 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: 58How '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 dieselfde ding te bewerkstellig. 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: Dit 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, IncSQL 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 glad die data in 'n 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 om uit te stryk wees die data is om 'n bewegende gemiddelde te bereken. 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: 2016/03/08


No comments:

Post a Comment