Sunday 29 October 2017

Beregn Bevegelse Gjennomsnittet In Sql Server


Jeg jobber med SQL Server 2008 R2, og prøver å beregne et glidende gjennomsnitt. For hver post som jeg ser, vil jeg gjerne samle verdiene til de 250 tidligere postene, og deretter beregne gjennomsnittet for dette valget. Visningskolonnene mine er som følger: TransactionID er unikt. For hvert TransaksjonsID. Jeg vil gjerne beregne gjennomsnittet for kolonneverdi, over tidligere 250 poster. Så for TransactionID 300, samle alle verdier fra tidligere 250 rader (visningen sorteres synkende av TransactionID) og deretter i kolonne MovAvg skrive resultatet av gjennomsnittet av disse verdiene. Jeg ønsker å samle inn data innenfor en rekke poster. spurte 28. oktober klokken 20:58. Tidligere diskuterte vi hvordan vi skrev rullende gjennomsnitt i Postgres. Av populær etterspørsel viste du hvordan du gjør det samme i MySQL og SQL Server. Godt omslag Slik annoterer du støyende diagrammer som dette: Med en 7-dagers tidligere gjennomsnittlig linje slik: Den store ideen Vår første graf over er ganske støyende og vanskelig å få nyttig informasjon fra. Vi kan glatte det ut ved å plotte et 7-dagers gjennomsnitt på toppen av de underliggende dataene. Dette kan gjøres med vindufunksjoner, selvforbindelser eller korrelerte undersøkelser - dekke de to første. God start med et foregående gjennomsnitt, noe som betyr at gjennomsnittspunktet på den 7. i måneden er gjennomsnittet av de første syv dagene. Visuelt skifter toppene toppene i grafen til høyre, da en stor topp er gjennomsnittet i løpet av de følgende sju dagene. Først oppretter du en mellomtalltabel Vi vil beregne et gjennomsnitt over de totale registreringene for hver dag. Forutsatt at vi har en typisk bruker tabell med en rad per ny bruker og en tidsstempel createdat, kan vi opprette vårt aggregat vårt registreringsbord slik: I Postgres og SQL Server kan du bruke dette som en CTE. I MySQL kan du lagre det som et midlertidig bord. Postgres Rolling Average Heldigvis har Postgres vindufunksjoner som er den enkleste måten å beregne et løpende gjennomsnitt på. Denne spørringen antar at datoene ikke har hull. Spørringen er gjennomsnittlig i løpet av de siste syv radene, ikke de siste syv datoene. Hvis dataene dine har hull, fyll dem inn med generateseries eller bli med et bord med tette dataarker. MySQL Rolling Average MySQL mangler vindusfunksjoner, men vi kan gjøre en lignende beregning ved hjelp av selvforbindelser. For hver rad i vårt taletabell, blir vi med på hver rad som var de siste syv dagene og tar gjennomsnittet. Denne spørringen håndterer automatisk hull i datoen, ettersom vi ser på rader innenfor et datoperiode i stedet for de foregående N-radene. SQL Server Rolling Average SQL Server har vindufunksjoner, slik at beregning av rullende gjennomsnitt kan gjøres i enten Postgres-stilen eller MySQL-stilen. For enkelhet, brukte MySQL-versjonen med en selvtillit. Dette er konseptuelt det samme som i MySQL. De eneste oversettelsene er dateadd-funksjonen og eksplisitt navngitt gruppe etter kolonner. Andre gjennomsnitt Vi fokuserte på 7-dagers etterfølgende gjennomsnitt i dette innlegget. Hvis vi ønsket å se på det 7-dagers ledende gjennomsnittet, er det så enkelt som å sortere datoene i den andre retningen. Hvis vi ønsket å se på et sentrert gjennomsnitt, bruker vi: Postgres: rader mellom 3 forrige og 3 etter MySql: mellom signups. date - 3 og signups. date 3 i MySQL SQL Server: mellom dateadd (dag, -3, registreringer. dato) og dateadd (dag, 3, signups. date) SQL Server T-SQL-kode for å beregne et flytende gjennomsnitt av: Dallas Snider Les kommentarer Relaterte tips: Flere funksjoner - Brukerdefinert UDF Hvordan kan jeg glatte dataene i en kolonne med en flytte gjennomsnitt i T-SQL Kan du gå gjennom et eksempel i SQL Server med T-SQL-kode Hvordan kan vi validere resultatene Tidsserier data kan iboende støyende, og en god måte å jevne ut dataene er å beregne et glidende gjennomsnitt . Det finnes en rekke måter å beregne et bevegelig gjennomsnitt på i T-SQL, men i dette tipset vil vi se på en måte å beregne et glidende gjennomsnitt som setter gjennomsnittsvinduet x antall rader bak og x antall rader foran gjeldende datarute. Fordelen med dette er at det ikke er noe lag i gjennomsnittsverdien returnert og den bevegelige gjennomsnittsverdien er i samme rad med gjeldende verdi. La oss starte med å lage et bord og laste inn noen data ved hjelp av T-SQL nedenfor. Vi har 361 datapunkter som lager en støyende sinusbølge. Etter at du har lastet inn dataene, utfører vi følgende T-SQL-kode for å velge alle kolonnene sammen med den bevegelige gjennomsnittsverdien. I koden nedenfor er glidende gjennomsnittsvinduestørrelse 15 (7 rader som går foran den nåværende raden, pluss den nåværende raden, pluss de 7 følgende radene). Det bevegelige gjennomsnittet for DataValue-kolonnen returneres som MovingAverageWindowSize15-kolonnen. ORDER BY-klausulen er ekstremt viktig for å holde dataene i riktig sortert rekkefølge. Vi kan kopiere og lime inn resultatene i Excel for å bekrefte at beregningen er riktig. I bildet under starter vinduet i celle C3 og slutter ved C17. Det bevegelige gjennomsnittet som beregnet av T-SQL i dette tipset, vises i celle D10. Gjennomsnittet som beregnet av Excel er nederst og det er lik verdien i D10. I figuren nedenfor kan vi se de opprinnelige dataverdiene plottet i blått med det bevegelige gjennomsnittet plottet i rødt. Neste trinn Juster størrelsen på det bevegelige gjennomsnittsvinduet for å se hvordan plottet endres. Vær også sikker på å sjekke ut disse andre tipsene på T-SQL fra mssqltips: Siste oppdatering: 382016

No comments:

Post a Comment