Tuesday 14 November 2017

Flytte Gjennomsnittet In Sql Server 2008 R2


Jeg jobber med SQL Server 2008 R2 og prøver å beregne et glidende gjennomsnitt. For hver post i min visning vil jeg gjerne samle verdiene til de 250 tidligere postene, og deretter beregne gjennomsnittet for dette valget. Mine visningskolonner er som følger. TransaksjonsID er unikt For hvert TransaksjonsID, vil jeg gjerne beregne gjennomsnittet for kolonneverdi over tidligere 250 poster. Så for TransactionID 300, samle alle verdier fra forrige 250 rader, visningen sorteres synkende av TransactionID og deretter i kolonne MovAvg skriv resultatet av gjennomsnittlig av disse verdiene jeg ser for å samle inn data innenfor en rekke rekord. Skrevet 28. oktober kl. 20 på 58. Jeg prøver å ha en løpende gjennomsnittskolonne i SELECT-setningen basert på en kolonne fra n forrige rader i samme SELECT setningen Det gjennomsnittet jeg trenger er basert på de n forrige radene i resultatsettet. De første 3 radene i gjennomsnitts-kolonnen er null fordi det ikke finnes noen tidligere rader Rækken 4 i gjennomsnittskolonnen viser gjennomsnittet av tallet co høst fra de forrige 3 radene. Jeg trenger litt hjelp med å prøve å konstruere en SQL Select-setning som vil gjøre dette. En enkel selvtillit vil virke å utføre mye bedre enn en rad referanse subquery. Generate 10k rader av testdata. Jeg ville trekke Spesielt tilfelle av de første 3 radene av hovedspørsmålet, du kan UNION ALLE disse tilbake i hvis du virkelig vil ha det i raden, sett selvtillitskompetanse. På min maskin tar dette omtrent 10 sekunder, den subquery-tilnærmingen som Aaron Alton demonstrerte tar ca 45 sekunder etter at jeg endret det for å gjenspeile testkildetabellen. Hvis du gjør en SET STATISTIKPROFIL PÅ, kan du se at selvtilliten er med 10k kjører på bordspolen. Underkunden har 10k kjører på filteret, aggregatet og andre trinn. AVG Transact-SQL. ALL Gjelder aggregatfunksjonen til alle verdier ALLE er standard. DISTINCT Angir at AVG bare skal utføres på hver unikt forekomst av en verdi, uavhengig av hvor mange ganger verdien oppstår. Ekspression Er et uttrykk for nøyaktig numerisk eller omtrentlig numerisk datatype kategori, bortsett fra bitdatatypen Aggregate-funksjoner og subqueries er ikke tillatt. OVER partitionbyclause orderbyclause partitionbyclause dividerer resultatsettet produsert av FROM-klausulen i partisjoner som funksjonen blir brukt til. Hvis ikke spesifisert, behandler funksjonen alle rader av spørringsresultatet som angitt som en enkelt gruppebestemmelsesbyklause, bestemmer den logiske rekkefølgen der operasjonen utføres. orderbyclause er nødvendig. For mer informasjon, se OVER Klausul Transact-SQL. Returtypen bestemmes av typen av det evaluerte resultatet av expression. decimal kategori p, s. Hvis datatypen for uttrykket er en alias datatype, er returtypen også av aliasdatatypen. Hvis imidlertid datatypen for aliasdatatypen fremmes, for eksempel fra tinyint til int returneringsverdien er av den fremrykkede datatypen og ikke aliasdatatypen. AVG beregner gjennomsnittet av et sett med verdier ved å dividere summen av disse verdiene med tellingen av nonnull-verdier hvis summen overskrider maksimumsverdien for datatypen til returverdien vil en feil bli returnert. AVG er en deterministisk funksjon når den brukes uten OVER - og ORDER-BY-klausulene. Det er ikke bestemt når det er angitt med OVER - og ORDER-BY-klausulene. For mer informasjon, se Deterministiske og Nondeterministiske Funksjoner. Bruk av SUM - og AVG-funksjonene til beregninger. Følgende eksempel beregner gjennomsnittlig ferietid og summen av sykefravær som vicepresidentene i Adventure Works Cycles har brukt. Hver av disse aggregatfunksjonene produserer en enkelt oppsummering verdi for alle hentede rader Eksemplet bruker AdventureWorks2012-databasen.

No comments:

Post a Comment