Bewegende Gemiddelde Sql Query


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 het 'n tafel produksie wat die volgende struktuur bevat: Ek het data vir elke her van 2011/01/01 tot 2013/08/01. Wat ek wil in staat wees om te doen is maak 'n 12 maande bewegende gemiddelde begin 2012/01/01 vir elke rep, soos volg: waar elke ry verteenwoordig die 12 maande bewegende gemiddelde vir genoemde rep by genoemde tyd. Ek het 'n paar voorbeelde wat vaagweg naby was en ek het probeer om hulle te help nie. Dit blyk dat die byvoeging van 'n groep deur rep komponent is die groot afwyking van ander voorbeelde. Dit is omtrent so ver as wat ek gekry het: Dit navraag blyk 'n algehele gemiddelde of som trek, want daar is geen groepering in die gekorreleer subquery. Toe ek probeer om groep, kry ek 'n fout dat dit net kan terugkeer hoogstens een ry. gevra 10 Oktober 13 by 14: 47This 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: AVG (Transact-SQL) ALLE Pas die totale funksie om alle waardes. Alles is die verstek. DISTINCT dui daarop dat, AVG uitgevoer word slegs op elke unieke geval van 'n waarde, ongeag hoeveel keer die waarde voorkom. uitdrukking is 'n uitdrukking van die presiese numeriese of geskatte numeriese data tipe kategorie, behalwe vir die tipe bietjie data. Totaal funksies en subqueries is nie toegelaat nie. OOR (partitionbyclause orderbyclause) partitionbyclause verdeel die resultaat stel wat deur die VANAF klousule in mure waaraan die funksie toegepas word. As nie gespesifiseer, die funksie behandel alle rye van die navraag gevolg gestel as 'n enkele groep. orderbyclause bepaal die logiese volgorde waarin die operasie uitgevoer word. orderbyclause word vereis. Vir meer inligting, sien OOR klousule (Transact-SQL). Die tipe terugkeer word bepaal deur die tipe van die geëvalueer gevolg van uitdrukking. desimale kategorie (p, s) As die tipe data van uitdrukking is 'n alias data tipe, die soort opbrengs is ook van die tipe alias data. Maar, as die tipe basis data van die alias datatipe bevorder, byvoorbeeld uit tinyint om Int. die terugkeer waarde is van die bevorder datatipe en nie die alias datatipe. AVG () bere die gemiddelde van 'n stel waardes wat deur die som van die waardes te deel deur die telling van nonnull waardes. As die som groter as die maksimum waarde vir die tipe data van die terugkeer waarde 'n fout sal teruggestuur word. AVG is 'n deterministiese funksie wanneer dit gebruik word sonder die oor en ORDER BY klousules. Dit is deterministiese wanneer gespesifiseerde met die oor en ORDER BY klousules. Vir meer inligting, sien Deterministiese en deterministiese funksies. A. Die gebruik van die som en AVG funksies vir berekeninge Die volgende voorbeeld word bereken dat die gemiddelde vakansie-ure en die som van siekteverlof ure wat die vise-presidente van Avontuur Werke Cycles gebruik. Elkeen van hierdie totaal funksies produseer 'n enkele opsomming waarde vir al die opgespoor rye. Die voorbeeld gebruik die AdventureWorks2012 databasis.

Comments