Thursday 23 November 2017

Bewegende Gemiddelde Berekening In Sql


In hierdie post, ek het 'n truuk te doen bewegende gemiddelde berekening wys (kan uitgebrei word na ander operasies waarby windows funksies) wat super vinnig. Dikwels moet SAS ontleders uit te voer bewegende gemiddelde berekening en daar is verskeie opsies wat deur die volgorde van voorkeur: 1. PROC brei 2. DATA STAP 3. PROC SQL Maar baie plekke kan nie gelisensieer SAS / ETS te gebruik PROC uit te brei en te doen bewegende gemiddelde in Data stap vereis 'n paar kodering en is fout geneig. PROC SQL 'n natuurlike keuse vir junior programmeerders en in baie besigheid gevalle die enigste oplossing, maar SAS39s PROC SQL ontbreek windows funksies wat beskikbaar is in baie DBs te fasiliteer bewegende gemiddelde berekening is. Een tegniek mense gewoonlik gebruik is CROSS te sluit, wat baie duur en nie 'n werkbare oplossing vir selfs medium grootte datastel. In hierdie post, ek het 'n truuk te doen bewegende gemiddelde berekening wys (kan uitgebrei word na ander operasies waarby windows funksies) wat super vinnig. Oorweeg die eenvoudigste bewegende gemiddelde berekening waar die agterste K waarnemings word by die berekening ingesluit, naamlik MA (K), Hier het ons K5. Ons genereer eers 'n 20 OBS steekproefdata, waar veranderlike ID is om gebruik te word vir windows en die veranderlike X is om gebruik te word in MA berekening en dan pas ons die standaard CROSS vat om eers die gevolglike data, Nie-Gegroepeer ondersoek, net om te verstaan ​​hoe om die data struktuur hefboom. Van die gevolglike datastel, is dit moeilik om 'n idee te kry, let39s nou sorteer quotbidquot kolom in hierdie datastel: Van hierdie gesorteer data, is dit duidelik dat ons eintlik don39t het om oor te steek Neem deel aan die hele oorspronklike datastel, maar in plaas daarvan, kan ons 'n quotoperationquot datastel wat die verskil waarde bevat genereer, en laat die oorspronklike datastel CROSS vat met hierdie baie kleiner quotoperationquot datastel, en al die data wat ons nodig het om te gebruik vir MA berekening sal daar wees. let39s Doen nou dit: CROSS JOIN oorspronklike data met quotoperationquot data, sorteer (a. idops), wat eintlik quotbid39 in gesorteerde datastel Let daarop dat bogenoemde kode, is dit nodig om byl vermeerder het deur b. weight sodat die data kan inter-leaved, anders dieselfde X waarde van die oorspronklike tabel sal wees uitset en MA berekening sal misluk. Die eksplisiete gewig veranderlike eintlik voeg in meer buigsaamheid om die hele MA berekening. Terwyl die opstel van dit te wees 1 vir alle OBS gevolg in 'n eenvoudige MA berekening, toewys verskillende gewigte sal help om meer komplekse MA rekenaar op te los, soos te gee verdere waarnemings minder gewig vir 'n verrotte MA. As verskillende K parameter in MA (K) berekeninge vereis, hoef slegs die werking datastel opgedateer wat triviale taak. Nou is die werklike kode sjabloon vir MA (K) berekening sal wees: Met hierdie nuwe metode, dit is interessant om dit te vergelyk met die duur self CROSS JOIN asook om Proc uit te brei. Op my werkstasie (Intel i5 3.8Ghz, 32GB geheue, 1TB 72K HDD), self CROSS JOIN is onbetaalbaar lang loop tyd (indien data is groot), terwyl die nuwe metode gebruik net 2X soveel tyd as PROC uit te brei, sal die tyd verbruik is triviale vergelyk om self CROSS aan te sluit. Tyd verbruik hieronder getoon is in quotsecondquot. Hier is die kode lesers kan hardloop en vergelyk julle. Posted 10 Mei 2015 deur Liang Xie SAS Programmering vir Data MiningI is besig met SQL Server 2008 R2, probeer om 'n bewegende gemiddelde te bereken. Vir elke rekord in my mening, sou ek graag die waardes van die 250 vorige rekords in te samel, en bereken dan die gemiddelde vir hierdie seleksie. My mening kolomme is soos volg: TransactionID is uniek. Vir elke TransactionID. Ek wil graag die gemiddelde vir waarde kolom bereken, oor die vorige 250 rekords. So vir TransactionID 300, versamel al waardes van die vorige 250 rye (siening word gesorteer dalende deur TransactionID) en dan in kolom MovAvg skryf die resultaat van die gemiddeld van hierdie waardes. Ek is op soek na data in te samel binne 'n verskeidenheid van rekords. gevra 28 Oktober 14 aan 20: 58How '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 dieselfde ding te bewerkstellig. 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: SQL Server T-SQL-kode om 'n bewegende gemiddelde te bereken deur: Dallas Snider Lees Kommentaar Verwante Wenke: Meer funksies - Gebruiker-gedefinieerde UDF Probleem Hoe kan ek die data in 'n gladde kolom met 'n bewegende gemiddelde in T-SQL kan jy asseblief loop deur 'n voorbeeld in SQL Server met T-SQL-kode Hoe kan ons die geldigheid van die resultate Oplossing tydreeksdata kan inherent lawaaierige en 'n goeie manier wees om uit te stryk die data is bereken 'n bewegende gemiddelde. Daar is 'n aantal maniere om 'n bewegende gemiddelde in T-SQL bereken, maar in hierdie punt sal ons kyk na 'n manier om 'n bewegende gemiddelde wat die gemiddelde venster x aantal rye agter en x aantal rye stel voor die stroom te bereken data ry. Die voordeel hiervan is dat daar geen vertraging in die gemiddelde waarde teruggekeer en die bewegende gemiddelde waarde is op dieselfde ry met sy huidige waarde. Kom ons begin deur die skep van 'n tafel en laai 'n paar data met behulp van onder die T-SQL. Ons het 361 datapunte wat 'n lawaaierige sinusgolf te skep. Na die laai van die data, sal ons die volgende T-SQL-kode uit te voer om al die kolomme kies saam met die bewegende gemiddelde waarde. In die onderstaande kode, die bewegende gemiddelde venster grootte is 15 (7 rye die huidige ry voorafgaande, plus die huidige ry, plus die 7 volgende rye). Die bewegende gemiddelde van die kolom DataValue teruggestuur as die kolom MovingAverageWindowSize15. Die ORDER BY klousule is uiters belangrik om die data in die behoorlike gesorteerde volgorde hou. Ons kan kopieer en plak die resultate in Excel om die geldigheid van die berekening korrek is. In die onderstaande beeld, die venster begin in sel C3 en eindig by C17. Die bewegende gemiddelde bereken deur die T-SQL in hierdie punt lyk in sel D10. Die gemiddelde bereken deur Excel is aan die onderkant en dit is gelykstaande aan die waarde in D10. In die onderstaande figuur is, kan ons die oorspronklike data waardes geplot in blou met die bewegende gemiddelde in rooi gestip sien. Volgende stappe Eers die grootte van die bewegende gemiddelde venster om te sien hoe die plot verander. Maak ook seker dat jy check die ander wenke oor T-SQL uit mssqltips: Laaste wysiging: 08/03 / 2016Calculating waardes binne 'n rollende venster in Transact SQL Dwain Camps berekening waardes binne 'n rollende venster in SQL Enige tyd wat jy nodig het om te kombineer waardes oor 'n paar rye in SQL, kan die probleem 'n uitdaging wees, veral wanneer dit kom by prestasie. Ons sal fokus op die rol van twaalf maande totale probleem, maar ons metodes aangewend kan word om enige tyd venster (bv 3 maande) of om gemiddeldes en ander riffen oor dié tyd vensters sowel. A Rolling totaal vir 'n maand is die totaal vir die maand plus die vorige maande binne die venster, of NULL as jy don8217t het die waardes vir al die vorige maande binne die venster. In vorige weergawes van SQL Server, het jy om te spring deur 'n paar hoepels om vorendag te kom met 'n metode wat goed presteer, maar SQL 2012 bied 'n paar nuwe funksies wat dit makliker maak. In beide gevalle, is daar verskeie geldige oplossings. Wat is die vinnigste en mees doeltreffende We8217ll probeer om hierdie vraag in hierdie artikel beantwoord. Ons sal werk in SQL 2012. As jy wil om te volg saam, jy kan gebruik maak van die Monster Queries. sql hulpbron you8217ll aangeheg vind. Data Setup en Staat van die Business Probleem Dikwels you8217ll jouself met baie transaksies binne 'n maand, maar in ons geval we8217ll aanvaar you8217ve reeds jou transaksies gegroepeer vir elke maand. We8217ll ons primêre sleutel tot 'n soort onlangse data toewys, en sluit 'n paar waardes waaroor ons wil bou aan die rol van twaalf maande totale te bekom. Dit produseer ook 'n effense verskillende navraag plan so we8217ll belangstel om te sien hoe sy prestasie resultate te vergelyk met ander oplossings tot dusver voorgestel word. Soveel vir tradisionele oplossings, en my verskoning as ek toevallig een van jou gunstelinge miskyk nie, maar voel vry om dit te kodeer en voeg dit by die prestasie toets tuig we8217ll later aan te bied om te sien hoe dit vaar. Oplossing 5: Gebruik van 'n Oulike Update As you8217ve nooit van die prettige Update (QU) en hoe dit toegepas kan word om probleme soos hardloop totale gehoor, Ek raai jy 'n lees van hierdie uitstaande artikel deur SQL MVP Jeff Moden. geregtig oplossing van die lopende totaal en ordinale posisie probleme. Voordat ons verder gaan, moet ons daarop let dat daar diegene wat aandring die QU metode verteenwoordig 'n ongedokumenteerde gedrag van SQL Server en so is nie te vertrou. Ons kan sê dat die sintaksis duidelik beskryf word deur die MS Boeke On Line inskrywing vir die update verklaring vir SQL weergawes 2005, 2008 en 2012. In werklikheid is dit gaan terug verder as dit. Ek het met sukses gebruik dit in SQL Server 2000, maar dit is geërf van Sybase en was in die eerste SQL Server weergawe ooit vrygestel. Om die naysayers I8217ll sê dat die 8220undocumented8221 gedrag is ten minste konsekwent in alle weergawes en daar is waarskynlik min rede om te vermoed dat dit sal afgekeur of verandering in die toekoms weergawes van MS SQL. Beskou jouself gewaarsku As jy al ooit oorweeg om 'n QU om enige probleem op te los, moet jy deeglik kennis van die baie reëls wat van toepassing (ook ingesluit in die gekla artikel deur Jeff) neem. Die belangrikste is, wat I8217ve hanteer in hierdie navraag, kan opgesom word as: Die tafel 'n gegroepeer indeks wat die bestel van die bron rye dui deur die tydperk wat jy wil dit wil reis moet hê. Die tabel moet 'n kolom waarin jy die gemiddelde lopende totaal kan plaas nie. Wanneer jy die werk uit te voer, moet jy die tafel te sluit met die TABLOCKX navraag wenk om seker te maak niemand anders kry in enige INSERT s, verwyder is of UPDATE s voor you8217re deur. Jy moet verhoed dat SQL uit probeer om die navraag met die opsie (MAXDOP 1) wenk paralleliseer. Aangesien 'n rollende twaalf maande-gemiddelde is bloot 'n lopende totaal bedekte, kan ons 'n kolom byvoeg by ons tafel en pas 'n QU navraag aan ons berekening te doen. Ek moet erken dat dit lyk 'n bietjie slordig, met al die veranderlikes wat jy nodig het om te verklaar. Basies wat ons doen is om tred te hou van die afgelope twaalf (sloerende) waardes hou, ten einde die 12de een (waar die kolom Rolling12Months opgedra) uit wat anders is 'n QU lopende totaal soos beskryf in Jeff8217s artikel verwyder. Ons het 'n hoë verwagtinge vir sy spoed gegee dat dit bekend is om die vinnigste metode vir die oplos van die bestuur totale probleem wees. Weereens, moet jy jouself oortuig dat die resultate is in ooreenstemming met vorige regstellings en ja hierdie oplossing optree steeds dieselfde in SQL 2012. As you8217re met my tot dusver, jy kan ook jouself vra 8220what gebeur as ek nodig het om verskeie vertoning bereken twaalf maande totale regoor verskillende partitions8221 Dit is relatief maklik vir al die ander oplossings aangebied, maar nie voor 'n bietjie van 'n uitdaging met behulp van die QU. Die antwoord op hierdie kan gevind word in die aangehegte hulpbron lêer: Oulike Werk Partitioned. sql. SQL 2012 Solutions Tot nou toe, sal alles wat ons gedoen het werk in SQL 2008. Die enigste ding wat we8217ve gedoen wat nie ondersteun word in SQL 2005 is die initializations van die veranderlikes Ons verklaar d in die QU benadering. Nou let8217s sien watter nuwe funksies SQL 2012 het wat toegepas kan word om die probleem op. Oplossing 6: Gebruik van 'n vensterraam Ons eerste SQL 2012 oplossing (6) wys hoe om 'n vensterraam wat 11 rye begin voor kan gebruik om die huidige ry, het deur middel van die huidige ry ons gewenste resultate som. Weereens, die teruggekeer resultate is dieselfde, maar die navraag plan is heel anders as vir die vorige oplossing SQL 2.012 we8217re egter nie besonder optimisties dat hierdie benadering 'n redelik presterende alternatiewe sal oplewer as gevolg van die aantal 8220look-backs8221 wat nodig is om dit te laat werk . Prestasie Vergelyking van die metodes Die ware toets om te sien hoe verskeie oplossings uit te voer is na die werklike uitvoering keer so 'n statiese bediener met behulp van 'n toets tuig met baie rye. Ons toets tuig getoon, saam met hoe Oplossing 1 en 2 is aangepas (verwys na kommentaar in die kode) om: Plaas die resultate in 'n tydelike tabel om die tydsverloop impak van die terugkeer van die rye om SQL Server Management Studio8217s resultate te vermy rooster. Verwyder die datum rekenkundige, want as die opwekking van 'n multi-miljoen ry toets harnasse is dit moeilik om te genereer wat baie unieke maande, so die tafel kolom Datum is hersien om 'n BIGINT datatipe wees. Vir die res van die oplossings (2 8211 6), het ons die SVE en Tydsverloop resultate van 1M al 4M rye weergegee. Interpretasie van die resultate Verstreke en CPU keer lyk konsekwent oor die verskillende metodes te wees met betrekking tot hul bestelling. Alle vertoon volgens skaal in 'n lineêre mode. Die prettige Update, neem aan jy kan dit verstaan ​​en al die gepaardgaande reëls, blyk die vinnigste beskikbare oplossing vir hierdie probleem opgelos kan selfs met inagneming van die nuwe funksies wat beskikbaar is in SQL 2012, die vensterraam benadering is beslis netjiese In SQL 2012, kompakte en elegant, maar effens roetes die prettige Werk oplossing oor die rye wat ons getoets het. Hierdie toetsuitslae lyk om te voldoen aan 'n vroeëre toets op Running Totale in SQL 8220Denali8221 CTP3 deur Microsoft Certified Meester Wayne Sheffield in sy blog. As you8217re vas met 'n vorige weergawe van SQL (2005 of 2008), en vir een of ander rede wat jy can8217t bly met behulp van 'n Oulike Werk (bv as jy don8217t vertrou dat hierdie ongedokumenteerde gedrag), die vinnigste oplossings beskikbaar is vir jou óf die CROSS TOEPASSING TOP of met behulp van 'n gekorreleer sub-navraag, soos beide van diegene blyk te wees in 'n noue band oor die raad. Dit blyk dat die 8220traditional8221 INNER JOIN is iets om te vermy. Dit sal waarskynlik net erger as jy nodig het tot op hede somme maak binne die JOIN8217s OP klousule. Net so, die gebruik van óf 'n oorsig tabel of meerdere LAG s (SQL 2012) was beslis nie die pad om te gaan. Ons het nie die oase - gebaseerde oplossings te verken, maar jy kan track back na die artikel verwys word op die bestuur van totale om 'n idee van hoe hulle kan verrig in hierdie geval kry. I8217ve ook gesien 'n paar oplossings wat 'n rekursiewe Gemeenskaplike Table Expression (rCTE) in diens, maar ek beslis wouldn8217t weddenskap op hul prestasie in vergelyking met die QU of vensterraam oplossings. Daar is baie maniere om waardes te bereken binne 'n rollende venster in SQL en daar is 'n paar duidelike prestasie wenners onder hulle. Ons hoop jy het gevind dat hierdie gids om die beskikbare metodes interessant en insiggewend. Downloads Totaal: 30 Gemiddeld: 4.6 / 5 Dwain Camps is 'n projekbestuurder vir baie jare. Omdat prestasie van aansoeke 'n kritieke suksesfaktor vir projekte kan wees, het hy evangelisasie op die behoefte om hoogs ontwikkel presterende SQL. Deur mentorskap en authoring artikels oor SQL, hoop hy om 'n toekomstige generasie van sagteware-ingenieurs op te lei op die regte en verkeerde maniere om SQL-kode te lewer. Hy het ook 'n spesiale belangstelling in die ontwikkeling van oplossings vir komplekse, data intensiewe probleme met behulp van 'n hoë werkverrigting SQL omdat die verklarende aard van SQL laat ontwikkeling van algoritmies unieke oplossings wat prosedurele tale nie in staat kan wees. Volg Dwain op Twitter Verwante artikels ook in SQL Met die opkoms van NoSQL databasisse wat die ontginning van aspekte van SQL vir die gebruik daarvan, en is die aanvaarding van volle transactionality, is daar 'n gevaar van die data-dokument modelle hiërargiese aard veroorsaak dat 'n fundamentele konflik met relasionele teorie Ons gevra ons verhoudings deskundige, Hugh Bin-Haad 'n moeilike omgewing vir databasis theorists. hellip Lees meer ook in SQL Server Elke SQL Server databasis programmeerder moet vertroud wees met die stelsel funksioneer te wees uitlê. Dit wissel van die sublieme (soos rowcount of identiteit) om die belaglike (IsNumeric ()) Robert Sheldon bied 'n oorsig van die mees gebruikte van them. hellip Lees meer ook in T-SQL Programmering Om ten volle gebruik te maak van die stelsel katalogus vir meer inligting oor 'n databasis uit te vind, moet jy vertroud is met die metadata funksies te wees. Hulle slaan 'n groot deel van die tyd en tik wanneer bevraagteken die metadata. Sodra jy die hang van hierdie funksies te kry, die stelsel katalogus lyk skielik maklik om te gebruik, soos Robert Sheldon toon in hierdie article. hellip Lees meer ook in T-SQL Programmering Die manier waarop jy die formaat T-SQL-kode kan die produktiwiteit van die invloed mense wat jou werk daarna in stand te hou. Dit is nooit 'n goeie ervaring om SQL Kode te sien, skreeu Wie die duiwel het hierdie kode, en dan besef dat dit wat jy was. Grant gee 'n paar voorbeelde van swak uitleg en verduidelik waarom jy nooit moet check-in erg-formaat SQL code. hellip Lees meer Baie goeie Groot artikel Ek was verbaas dat LAG () het so erg. Ek dink elke aanroeping word afsonderlik gedoen eerder as faktor uit en optimale soos 'n venster. Groot verduideliking Ek stem saam, dit is 'n groot verduideliking van verskillende maniere om waardes binne 'n rollende venster te bereken. As jy hierdie voorbeelde te toets op SQL 2012 wat jy hoef te MyTable verander met RollingTotalsExample. Thanks a lot, mnr Camps Telling metode Hi Dwain, het ek opgelet dat jou Telling tafel navraag veroorsaak 'n tabel Spool operateur en gedink dat jy dalk oorweeg om die telling deel van 'n Datums tabel soos hierdie: KIES GroupingDate, ValueMAX (CASE GroupingDate WANNEER Datum DAN a. Value end), Rolling12MonthsCASE WANNEER ROWNUMBER () oor (ORDER BY GroupingDate) Dit 12 En NULL NÓG som (Waarde) punt in ResultsSoln2 UIT RollingTotalsExample n CROSS geld (mdash Verwyder die datum rekenkundige waardes (datum), (DATE1), (DATE2), (Date3), (Date4), (Date5), (Date6), (Date7), (Date8), (Date9), (Date10), (Date11)) c (GroupingDate) GROEP DEUR GroupingDate WAT GroupingDate Dit MAX (Datum) ORDER bY GroupingDate (Verskoning as opmaak is sleg uitvoering maak dus geen voorskou) Hierdie verandering steeds wouldnrsquot dit 'n aanspraakmaker maak, maar maak 'n reuse-verbetering op daardie queryhellip Dankie vir die kommentaar Dankie Joe en Nic. Irsquom bly jy het die artikel interessant. Joe: Ek was ook effens verras deur die PG resultate en dit laat my wonder wat die gelykbreekpunt sou wees. Miskien 3 maande dalk nie so erg wees nie, maar dit is nog steeds moeilik om te glo dat dit dalk vinniger as die QU wees. Kerfstok Tabelle MM: Vir een of ander rede het ek 'n persoonlike voorkeur in-line kerfstok tafels, maar jou resultate is interessant as net om te oorweeg vir ander gevalle. Bystand met bewegende Jaarlikse Totaal My eerste post. Ek nodig het om die Moving Jaarlikse Totaal bereken vir die waarde bo vir die voorafgaande 12 maande, met vandeesmaand om maand 12. Ek moet dan die Moving Jaarlikse Totaal kry vir die 12 maande voor die. Met die idee om te MAT vergelyk vir vandeesmaand met die ooreenstemmende maand verlede jaar, en vir elke voorafgaande maand. My poging het vir my hierdie: Met CTE as (SELECT rNum ROWNUMBER () oor (einde datum) Datum Waarde Rolling12MonthsCASE WANNEER ROWNUMBER () oor (Sorteer op datum) GT 11 Toe som (Waarde) oor (Sorteer op datum rye tussen.. 11 voorafgaande sowel as huidige ry) EINDE vAN RollingTotalsExample) Kies van CTE, (Kies mRNum Max (rNum) van CTE) deMax Waar rNum tussen mRNum uitvoering maak 23 en mRNum met die vermoë om die Were verklaring verander om te besin of ek wil vanjaar of die vorige jaar. My ware data het die datum soos in Integer 201409 wat ek dink sal die lewe makliker maak vir my as ek kan aftrek 100 die vorige jaar te kry. Uitstekende artikel en enige hulp sal waardeer word. Dit is my werkende oplossing (met 'n paar geraas) mdash Rolling 12 maande totale behulp SQL 2012 en 'n vensterraam INDIEN object nommer (lsquotempdb..PreviousYearrsquo) nie NULL DROP TABLE PreviousYear Met CTE as (SELECT rNum ROWNUMBER () oor (bevel deur Datum ). Datum. Waarde Rolling12MonthsCASE WANNEER ROWNUMBER () oor (Sorteer op datum) GT 11 Toe som (Waarde) oor (Sorteer op datum rye tussen 11 voorafgaande sowel as huidige ry) eINDE vAN RollingTotalsExample) Kies pyRowNum ROWNUMBER () oor (bevel deur mRNum ). . sStart mRNum ndash 24. eend mRNum ndash 12 in PreviousYear Van CTE, (Kies mRNum Max (rNum) van CTE) deMax Waar rNum tussen mRNum uitvoering maak 23 en mRNum ndash 12 mdash Rolling 12 maande totale behulp SQL 2012 en 'n vensterraam INDIEN object nommer (lsquotempdb..ThisYearrsquo) IS NIE NULL DROP TABLE ThisYear met CTE as (SELECT rNum ROWNUMBER () oor (bevel deur Datum). Datum. Waarde. Rolling12MonthsCASE WANNEER ROWNUMBER () oor (Sorteer op datum) GT 11 Toe som (Waarde) oor (Sorteer op datum RYE TUSSEN 11 voorafgaande sowel as huidige ry) eINDE vAN RollingTotalsExample) Kies tyRowNum ROWNUMBER () oor (bevel deur mRNum). . sStart mRNum ndash 11. eend mRNum in ThisYear Van CTE, (Kies mRNum Max (rNum) van CTE) deMax Waar rNum tussen mRNum uitvoering maak 11 en mRNum Kies uit ThisYear ty Left Sluit PreviousYear py op ty. tyRowNum py. pyRowNum Dit kan Irsquom werk nie naby 'n comp met SQL toegang oomblik so ek canrsquot dit te toets (daar dalk 'n paar spelfoute / sintaksfoute). SELECT T. DateKey, AVG (T. ValueField) oor (Oder DEUR T. DateKey ASC TUSSEN 365 voorafgaande sowel as en die huidige ry) AS YMAValueField UIT DataTable AS T ORDER BY T. DateKey ASC In geval AVG is een van die totaal funksies word nie ondersteun met TUSSEN reeks (ek weet som ondersteun). SELECT T. DateKey, SUM (T. ValueField) oor (Oder DEUR T. DateKey ASC TUSSEN 365 voorafgaande sowel as en die huidige ry) / geval wanneer DATEDIFF (DAG, Begindatum, T. DateKey) Dit 365 DAN DATEDIFF (DAG, Begindatum, T. DateKey) NÓG 365 eindig as YMAValueField UIT DataTable AS T ORDER bY T. DateKey ASC SQL Sluit Eenvoudige Talk Sluit meer as 200,000 Microsoft professionele mense, en kry volle, vrye toegang tot tegniese artikels, ons twee-maandelikse Eenvoudige Talk nuusbrief, en gratis SQL gereedskap . Besoek ons ​​patrone en praktyke biblioteek om meer oor databasis lewensiklus bestuur leer. Vind uit hoe om die proses van die bou, toets en implementering van jou databasis veranderinge om risiko te verminder en maak 'n vinnige vrystellings moontlik outomatiseer. Beste onlangse artikels in T-SQL Programmering

No comments:

Post a Comment