19. maj 2004 - 09:30Der er
16 kommentarer og 1 løsning
Problem med gennemsnit ud fra en bestemt dag (datetime)
Hej Har to spørgsmål :) 1. Har en tabel ’WMControlResults’, som løbende bliver opdateret med data. Har ønsker jeg så at få gennemsnit, min, max værdier og antal målinger for forskellige ’typer’, ud fra forskellige parameter -1 time, 1 døgn, 1 måned og 1 år. Men hvordan skal SQL’en for det se ud? SELECT avg(værdi) FROM WMControlResults WHERE type='Effekt' AND ???;
2. Desuden ønsker jeg at gemme disse hver 24 time, i en anden tabel ’WMControlResults, for derefter at slette dataen i WMControlResults. Så ’WMControlResults’ virker som en slags buffer. Det med at der bliver spurgt hver døgn klares inde fra min kode.
Min tabeler ser således ud: create table WMControlResults ( millId int, dato datetime, type String, Værdi double, Enhed String, fejl String, primary key (millId,dato,type), foreign key (millId) references WMControlMill(millId) );
Eksempel ( gruppering på dagsniveau og timeniveau :
SELECT Format([oprettelsesdato],"dd/mm/yyyy") AS Dato, Format([oprettelsesdato],"hh") AS [time], Sum(tblData.beløb) AS SumOfbeløb FROM tblData GROUP BY Format([oprettelsesdato],"dd/mm/yyyy"), Format([oprettelsesdato],"hh");
Min 'Type' som er en string er jo forskellig f.eks Effekt, nyttevirkning, vindhastighed. Så den skal jo defineres. SELECT avg(værdi) FROM WMControlResults WHERE type='Effekt' Men hvis jeg nu ønsker gennemsnit fra igår d.18 hvordan gør jeg det?
SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Avg(WMControl.Værdi) AS GennemsnitOfVærdi FROM WMControl WHERE (((WMControl.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=18-5-2004));
Tak for svarene... Men er ikke helt med :( Lad os sige at jeg har disse dater i min WMControlResults tabel: 1, 5/18/2004 3:23:20 PM, Effekt, 7.5, m/s, null 1, 5/18/2004 5:24:20 PM, Effekt, 8.5, m/s, null 1, 5/18/2004 9:25:20 PM, Effekt, 5.5, m/s, null 1, 5/18/2004 3:26:20 AM, Effekt, 2.5, m/s, null 1, 5/18/2004 3:26:21 AM, Vindstyrke, 2.5, m/s, null 1, 5/19/2004 3:26:20 AM, Effekt, 2.5, m/s, null Så vil jeg gerne have følgende: min, max, avg og antal(målinger), ud fra den 18 maj 2004(i går). Hvor type er ’effekt’. Vil gerne have et dynamisk kald da det altid er dagen før jeg henter data fra. min = 2,5 max = 8.5 avg = 6 antal = 4 Disse vil jeg så gerne have skrevet over i min WMControlStatistics tabel Autonumber , 1 , 5/18/2004 , Effekt , 2,5 , 8,5 , 4 , m/s, null , 4 Herefter vil jeg gerne slette data fra den 18. maj hvor type=effekt fra WMControlStatistics.
SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Avg(WMControl.Værdi) AS avg FROM WMControl WHERE (((WMControl.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1)) UNION SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Min(WMControl.Værdi) AS Min FROM WMControl WHERE (((WMControl.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1)) UNION SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Max(WMControl.Værdi) AS Max FROM WMControl WHERE (((WMControl.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1)) UNION SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Count(WMControl.Værdi) AS Antal FROM WMControl WHERE (((WMControl.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1));
Hej igen. Mange tak fordi du tager dig tid til dette her :) Når jeg skriver det du har skrevet, har lige rettet det ene tabel navn fra WMContro til WMControlResults. Bliver jeg bedt om at give WMControlResults.Værdi en parameter value. SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Avg(WMControlResults.Værdi) AS avg FROM WMControlResults WHERE (((WMControlResults.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1)) UNION SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Min(WMControlResults.Værdi) AS Min FROM WMControlResults WHERE (((WMControlResults.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1)) UNION SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Max(WMControlResults.Værdi) AS Max FROM WMControlResults WHERE (((WMControlResults.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1)) UNION SELECT Format([dato],"dd/mm/yyyy") AS DatoNiveau, Format([dato],"hh") AS TimeNiveau, Count(WMControl.Værdi) AS Antal FROM WMControlResults WHERE (((WMControlResults.type)="Effekt")) GROUP BY Format([dato],"dd/mm/yyyy"), Format([dato],"hh") HAVING (((Format([dato],"dd/mm/yyyy"))=Date()-1));
ahh den har jeg også lige selv fundet :) Når jeg så køre querien for jeg en tabel, men 3 rækker. DatoNiveau, TimeNiveau og avg, men den er tom. burde jeg ikke også at få fire rækker? -Jeg ønsker jo max, min, avg og antal målinger.
Det næste du så skal gøre, for at kunne benytte resultaterne videre, skulle være dette :
TRANSFORM Sum(test_II.Resultat) AS SumOfResultat SELECT test_II.DatoNiveau, test_II.TimeNiveau FROM test_II GROUP BY test_II.DatoNiveau, test_II.TimeNiveau PIVOT test_II.ID;
Function GenererStatistik() Dim Msg, Style, Title, Ctxt, Response Dim strSQL As String Dim db As DAO.Database
Msg = "Du har valgt at generere statistik for : " & Date - 1 & " Vil du fortsætte ?" Style = vbYesNo + vbCritical + vbDefaultButton2 Title = "Statistikgenerering" Ctxt = 1000 Response = MsgBox(Msg, Style, , Title, Ctxt)
Hej Lasse. Så fik jeg det til at virke :) Takker mage gange.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.