Jeg prøver å beregne et 3 måneders rullende gjennomsnitt gruppert etter region og måned, som i. Not denne måneden er utvidet for illustrative formål, jeg d virkelig forvente at produksjonen bare sier en enkelt måned. Nå kan jeg gjøre dette ved å lage en CTE gruppering etter region og måned, så bli med på det et par ganger. Men det er stygt, tenk hvis du måtte gjøre et 6 måneders rullende gjennomsnitt eller 12 måneders rullende gjennomsnitt, prøver jeg å bruke t-sql 2012 analytiske funksjoner, spesielt RANGE-alternativet jeg har brukt ROWS tidligere, men aldri rekkevidde. Hva jeg prøvde var. Men jeg får en syntaksfeil. Msg 8120, Level 16, State 1, Line 2 Kolonne er ugyldig i valglisten fordi den ikke er inneholdt i enten en aggregatfunksjon eller GROUP BY-klausulen. Bare jeg gjør noe dumt, men jeg er ikke sikker på hva. 23 13 på 7 54.marker 476k 101 920 1089.youe må flytte denne gruppen ved å gå inn i vinduet funksjonen avg var over partisjonen etter region oder av ahorsewithnoname mar 23 13 på 8 41.First of all er RANGE bare støttet med UNBOUNDED og CURRENT ROW-rammeavgrensninger, Det kan ikke brukes med N PRECEDING eller N FØLGENDE Fra tittelen ser du ut til at du vil få 3 måneders rullende avg glidende avg, da er det bedre å bruke ROWS Bruke ROWS Dette er mer sannsynlig hva du trenger SQl Fiddle Demo . Noter ved hjelp av RANGE Note Ved hjelp av RANGE må du styre partisjonsbredden, siden du vil øke med 3 måneder og rekkevidden støtter ikke N PRECEDING og N Følgende støtter det bare following. answered Mar 23 13 på 9 39. Jeg har lest diskusjonen du nevnte Det er gjeldende for PostgreSQL siden det jeg Det er mulig å lage brukerdefinert aggregatfunksjon ved hjelp av SQL i PostgreSQL, men ikke tillatt i SQL Server. Bruk av rekursiv CTE er en mulig måte i SQL Server, men jeg merker at CTE-måten kan medføre mer tabellskanning enn vindufunksjoner. Så jeg lager dette innlegget å spørre om det er mulig å beregne eksponentiell glidende gjennomsnitt ved hjelp av SQL Server 2012-vindufunksjonen, akkurat som å beregne enkel glidende gjennomsnitt xiagao1982 14. april klokken 2 53. Først beregner du EMA SMA x i stedet for EMA x Sekund er utjevningskonstanten din faktisk beta verdien i min formel, ikke alfa Med disse to endringene ser SQLFiddle ut som dette Men det er fortsatt en liten forskjell mellom det faktiske resultatet og det forventede resultatet jeg ville gå tilbake og se om deres EMA-definisjonen samsvarer med den jeg vet Sebastian Meine 7 mai 13 på 13 46. Jeg har nettopp sett på skjemaet i regnearket du vedlegget, og det er langt fra standard EMA-definisjonen. Min formel beregner det eksponensielle glidende gjennomsnittet for den siste t en rader Regnearket beregner først standard gjennomsnittet i løpet av de siste ti radene og deretter det ubegrensede eksponentielt vektede glidende gjennomsnittet over alle gjennomsnitt. Dette følger skjemaet her Sebastian Meine 7. mai kl 13 på 13 52. Bruke et enkelt glidende gjennomsnitt for å glatte ut data er en ganske populær teknikk, det er så ille, at det primære eksemplet i SQL Anywhere Help er langt fra det enkle. Hva gjør dette eksempelet så komplisert. I tillegg til problemstillingen, beregner det det bevegelige gjennomsnittet av alt produktsalg, per måned, i år 2000. Her s det som gjør det komplekst. to referanser til AVG-funksjonen. a GRUPPE AV som alle i seg selv gjør omtrent alle SELECT en hode-scratcher. en skjult WINDOW clause. a WINDOW-klausul som ikke bruker WINDOW-søkeordet, slik at de uinitierte folkene som trenger eksempler mer enn noen andre, er det ikke åpenbart at en WINDOW er involvert i det hele tatt. Ikke bare noe WINDOW-klausul, husk deg, men en som inneholder hver enkelt komponent du kan kode i en WINDOW. a PARTITION BY. a RANGE-klausul ikke en enkel ROWS-klausul, men fullblåst RANGE-klausul, en som har et intimt forhold til ORDEREN BY Jeg vet hva en rad er, men hva redigeres er en RANGE. Men vent, det er mer. Valget av RANGE over ROWS i dette eksemplet er avgjørende for riktig bruk av spørringen for en mer fullstendig diskusjon av dette bestemte eksempelet, se eksempel 23 - Computing a Moving Average i Glenn Paulleys utmerkede OLAP-papir. La oss nå komme tilbake på sporet. En virkelig virkelig enkel flytende gjennomsnitt. Følgende eksempel viser 10 dagers verdier sammen med det bevegelige gjennomsnittet av dagens verdi og i går s WINDOW-klausulen på linjer 21 til 23 definerer et bevegelsesvindu som inneholder to rader i dag s rad CURRENT ROW og i går s rad 1 PRECEDING. the WINDOW ORDER BY-setningen bestemmer hva PRECEDING betyr forrige rad av and. the ROWS-klausulen bestemmer størrelsen på vinduet alltid to rader. Uttrykket AVG OVER twodays på linje 19 refererer til WINDOW-klausulen etter navn, og det forteller SQL Anywhere å beregne gjennomsnittet av de to verdiene som eksisterer i 2-rads glidende vindu, for hver rad i resultatsettet. Så for 2012 -02-02 gjennomsnittet 10 og 20 er 15 000000.for 2012-02-03 gjennomsnittet av 20 og 10 er 15 000000.for 2012-02-04 gjennomsnittet av 10 og 30 er 20 000000.for 2012-02 -10 gjennomsnittet på 10 og 60 er 35 000000.Oops, hva med den første row. The 2012-02-01-raden har ikke en PRØVENDE rad, så hva er gjennomsnittet over det bevegelige vinduet. Ifølge Glenn Paulleys s hvite papir i tilfelle et bevegelig vindu antas det at rader med null-verdier eksisterer før første rad, og etter siste rad i inpu t. Det betyr at når vinduet som beveger seg 2012-02-01 som CURRENT ROW, inneholder 1 PRECEDING-raden NULL-verdier, og når SQL Anywhere beregner en AVG som inneholder en NULL-verdi, teller det ikke at NULL i det hele tatt ikke er i teller eller i nevneren når du beregner gjennomsnittet Her er bevis Det er derfor twodayaverage 10 000000 for første rad 2012-02-01.Postet av Breck Carter klokka 3 47 PM.
No comments:
Post a Comment