12. december 2006 - 13:23Der er
12 kommentarer og 1 løsning
Gennemsnit af de 10 nyeste data i et dataset?
Jeg kan god finde ud af at lave en forespørgsel, der tager et gennemsnit af en række data fra en tabel, men kan det lade sig gøre, at den kun skal tage gennemsnittet af de 10 nyeste data?
SELECT TOP 5 tbl_procestid.tid FROM tbl_procestid ORDER BY tbl_procestid.tid DESC
Dette samt de andre forslag fungerer ikke, men er det fordi jeg ikke ved hvor det skal skrives ind? I min forespørgsel har jeg følgende valgmuligheder: Felt, Tabel, Total, sorter, Kriterier og Eller
Jeg har også et datofelt i min tbl_procestid men dette skal åbenbart ikke bruges til at rangere mine data? - hvad rangeres de så efter??
Mit forslag er selve SQLsætningen i en forespørgsel. Prøv at åbne en ny tom forespørgsel og luk vinduet med tabeller > Vis > SQL og indsæt din egen SQL ovenfor
Jeg udvider den lidt, ved at tbl_procestid, hvorfra gennemsnittet skal tages, er en undertabel til tbl_processer. Dvs. at til hvert ProcesID i hovedtabellen (tbl_processer), er der tilknyttet op til 100 tider i denne undertabel (tbl_procestid), men af disse tider skal kun de 10 nyeste bruges til at lave gennemsnittet i en forespørgsel.
Jeg har nu fundet ud af hvordan man laver gennemsnittet ved at sætte ind i SQL-visningen som du sagde ovenfor, men det giver mig kun gennemsnittet af de nyeste data fra alle processer samlet set. Kan det gøres for hvert enkelt procesID, at der tilknyttes en gennemsnitstid?
Lidt rodet, men skriv hvis du mangler oplysninger -
SELECT ProcesTid.ProcesID, Avg(SELECT TOP 1 procestid.tid FROM ProcesTid ORDER BY ProcesTid.Dato DESC) AS GennemsnitOfTid FROM ProcesTid GROUP BY ProcesTid.ProcesID;
Sådan ser koden ud nu, men det virker stadig ikke - jeg har prøvet "alt" - Please help
Den giver følgende fejl-melding: "At most one record can be returned by this subquery"
Det var da synd, at du har opgivet. Jeg ved ikke om nedenstående vil "køre", da min erfaring med SQL server ikke er stor, men prøv det lige en sidste gang... :-)
SELECT p.ProcesID, AVG(Tid) AS GennemsnitsTid FROM tbl_processer p LEFT JOIN (SELECT TOP 10 * FROM tbl_procestid WHERE ProcesId = p.ProcesId ORDER BY dato DESC) AS tmp ON p.ProcesId = tmp.ProcesId GROUP BY p.ProcesId
Sorry, det er jo Access. Har lige prøvet, og det virker desværre ikke, da man åbenbart ikke kan køre med TOP i en subselect...
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.