Monday 13 November 2017

Mysql Bevegelig Gjennomsnitt Beregning


Tidligere diskuterte vi hvordan du skriver rullende gjennomsnitt i Postgres. Ved populær etterspørsel viser vi deg hvordan du gjør det samme i MySQL og SQL Server. Vi vil dekke hvordan du annoterer støyende diagrammer som dette. Med en 7-dagers tidligere gjennomsnittlig linje som dette. 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 subqueries - vi skal dekke de to første. Vi begynner med et foregående gjennomsnitt, noe som betyr at gjennomsnittspunktet på den 7. i måneden er gjennomsnittet av de første syv dagene. Dette skifter faktisk toppene i grafen til høyre, som en stor pigg er gjennomsnittet i løpet av de følgende sju dagene. Først Opprett en mellomliggende tabell. 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 opprettet , kan vi lage vårt aggregat vår s ignsjonstabell som det. I Postgres og SQL Server kan du bruke dette som en CTE I MySQL kan du lagre det som en midlertidig tabell. Postgres Rolling Average. Heldigvis har Postgres vindufunksjoner som er den enkleste måten å beregne et løpende gjennomsnitt på. Denne spørringen forutsetter 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 i et bord med tette dataarker. MySQL Rolling Average. MySQL mangler vindufunksjoner, men vi kan gjøre en lignende beregning ved hjelp av selvforbindelser. For hver rad i vårt taletabell, går vi sammen i hver rad som var de siste syv dagene og tar gjennomsnittet. Dette spørsmålet håndterer automatisk hull i hullet da vi ser på rader innenfor et datoperiode i stedet for de foregående N-rader. 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 bruker vi MySQL versjonen på med et selvtillit. Dette er konseptuelt det samme som i MySQL De eneste oversettelsene er dateadd-funksjonen og eksplisitt navngitt gruppe av kolonner. Andre gjennomsnitt. Vi fokuserte på 7-dagers etterfølgende gjennomsnitt i dette innlegget. Hvis vi ønsket å se på 7-dagers ledende gjennomsnitt, det er 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 følgende. MySql mellom - 3 og 3 i MySQL. SQL Server mellom dateadd dag, -3 og dateadd dag, 3.Når jeg hadde et lignende problem, endte jeg med å bruke temp tabeller av flere grunner, men det gjorde dette mye lettere. Det jeg gjorde, ser veldig ut som det du Gjør det så langt som skjemaet går. Gjør skjemaet noe som ID-identitet, startdato, sluttdato, verdi Når du velger, gjør du en undervalg avg fra forrige 20 basert på ID-IDen. Gjør bare dette hvis du finner deg selv allerede ved å bruke temp tabeller av andre grunner, selv om jeg treffer de samme radene igjen og igjen for ulike beregninger , så det var nyttig å ha det lille datasettet. I min erfaring har Mysql fra 5 5 x en tendens til ikke å bruke indekser på avhengige valg, enten det er en undersøkelse eller en del. Dette kan ha en svært betydelig innvirkning på ytelsen der de avhengige utvalgskriteriene endres på hver rad. Gjennomsnittlig gjennomsnitt er et eksempel på en spørring som faller inn i denne kategorien. Eksekveringstiden kan øke med kvadratet av radene. For å unngå dette, velg en databasemotor som kan utføre indekserte oppslag på avhengige valg. Jeg finner postgres fungerer effektivt. for dette problemet. ansvaret 2. juli klokken 8 01. Ditt svar.2017 Stack Exchange, Inc. Jeg bruker følgende kode for å beregne 9-dagers flytende gjennomsnitt. Men det virker ikke fordi det først beregner alle de returnerte feltene før grensen kalles med andre ord, det vil beregne alle lukkene før eller lik den datoen, og ikke bare den siste 9. Så jeg må beregne SUM fra den returnerte valget, heller enn å beregne den rett. IE Velg SUM fra SELECT. Nå hvordan skulle jeg gå om å gjøre dette og er det veldig kostbart eller er det en bedre måte. Skrevet 20. april kl 13 på 13 43.

No comments:

Post a Comment