Thursday, 9 November 2017

Glidande medelvärde in sql server 2008


Jag försöker att ha en löpande medelkolumn i SELECT-satsen baserat på en kolumn från n föregående rader i samma SELECT-satser. Det genomsnittliga jag behöver är baserat på de n föregående raderna i resultaten. De första 3 raderna i medelkolumnen Är noll eftersom det inte finns några tidigare rader Raden 4 i kolumnen Genomsnitt visar medelvärdet av nummerkolumnen från de föregående 3 raderna. Jag behöver lite hjälp med att försöka konstruera ett SQL Select-uttalande som kommer att göra detta. En enkel självförening skulle tyckas Att utföra mycket bättre än en rad referens subquery. Generate 10k rader av testdata. Jag skulle dra specialfallet av de första 3 raderna ur huvudfrågan, du kan UNION ALL de tillbaka i om du verkligen vill ha det i raduppsättningen Självsammanfogningsfråga. På min maskin tar det ungefär 10 sekunder, det subquery-tillvägagångssätt som Aaron Alton demonstrerade tar ungefär 45 sekunder efter att jag har ändrat det för att återspegla min testkälla-tabell. Om du gör en SET STATISTICS PROFILE ON kan du se självtillfoga Har 10k exekverar på ta Ble spool Subquery har 10k körs på filtret, aggregat och andra steg. Jag arbetar med SQL Server 2008 R2 och försöker beräkna ett glidande medelvärde. För varje post enligt min uppfattning vill jag samla värdena för de 250 tidigare Poster och beräkna sedan genomsnittet för det här valet. Min synkolumner är följande. TransaktionsID är unik För varje TransaktionsID vill jag beräkna medelvärdet för kolumnvärde, över tidigare 250 poster, så för TransactionID 300, samla alla värden från föregående 250 Radervy sorteras nedåtgående med TransactionID och sedan i kolumnen MovAvg skriv resultatet av genomsnittet av dessa värden Jag letar för att samla in data inom en rad recordss. asked 28 okt 14 vid 20 58.AVG Transact-SQL. ALL Applicerar aggregatet Funktion till alla värden ALL är standard. DISTINCT Anger att AVG endast ska utföras på varje unik instans av ett värde, oavsett hur många gånger värdet inträffar. expression Är ett uttryck för exakt numerisk eller approximativ Numerisk datatypskategori med undantag för bitdatatypen Aggregatfunktioner och subqueries är inte tillåtna. OVER partitionbyclause orderbyclause partitionbyclause delar upp resultatuppsättningen som produceras av FROM-klausulen i partitioner som funktionen appliceras om inte anges, behandlar funktionen alla rader av Sökresultatet som anges som en enda grupporderbyte bestämmer den logiska ordningen i vilken operationen utförs orderbyclause krävs För mer information se överklausul Transact-SQL. Returtypen bestäms av typen av det utvärderade resultatet av expression. decimal kategori P, s. Om utskriftstypen är en aliasdatatyp, är returtypen också av aliasdatatypen. Om databas typen av aliasdatatyp främjas, till exempel från tinyint till int returneringsvärdet Är av den främjda datatypen och inte aliasdatatypen. AVG beräknar medelvärdet av en uppsättning värden genom att dividera summan av dessa värden med räkningen av nonnull-värdena If Summan överskrider det maximala värdet för datatypen för returvärdet ett fel kommer att returneras. AVG är en deterministisk funktion när den används utan över - och orderbestämmelserna Det är nondeterministic när det anges med över - och orderbestämmelserna För mer information, Se Deterministic och Nondeterministic Functions. A Använd SUM och AVG funktionerna för beräkningar. Följande exempel beräknar de genomsnittliga semestertimmarna och summan av sjukledighetstider som vicepresentanterna för Adventure Works Cycles har använt. Varje av dessa aggregatfunktioner producerar en enda sammanfattning Värde för alla hämtade rader Exemplet använder databasen AdventureWorks2012.

No comments:

Post a Comment