18. maj 2013 - 09:14Der er
4 kommentarer og 1 løsning
Distinct kun på én værdi (MS access / ASP)
Problemstilling: Jeg henter en top 5 over "senest rettede enheder". Hvis der på en enhed er rettet 3 ting, så vil den under top 5 fremgå 3 gange. Jeg ønsker her, at den blot viser denne enhed 1 gang ... således top 5 henter de seneste 5 enheder fremfor seneste 5 rettelser (håber det gav mening?!).
Benytter: - MS access - ASP
Forsøgt indtil videre: Normalt har jeg løst lignende opgaver med "distinct", men her hvor der er flere felter i brug, og jeg kun ønsker at "distinct'e" på én værdi, så går det i ged for mig. Jeg har fundet flere lignende spørgsmål/svar herinde, hvor det løses ved group by el.lign., men jeg er ikke lykkedes med det.
Min kode pt.: SELECT Distinct Top 5 Ferrari.ID, ActivityLog.ActivityId, ActivityLog.ActivityDateAndTime, Ferrari.size, Ferrari.ferrari, Ferrari.year FROM Ferrari INNER JOIN ActivityLog ON Ferrari.ID = ActivityLog.ActivityItemId ORDER BY ActivityId DESC
Opsummeret: Hvordan får jeg ovenstående statement ændret, så den kun henter Ferrari.ID én gang (distinct) ... så top 5 kun indholder 5 unikke Ferrari.ID ?
SELECT DISTINCT Ferrari.ID, Max(ActivityLog.ActivityID) AS MaksOfActivityID, Ferrari.size, Ferrari.ferrari, Ferrari.År FROM Ferrari INNER JOIN ActivityLog ON Ferrari.ID = ActivityLog.ActivityItemId GROUP BY Ferrari.ID, Ferrari.size, Ferrari.ferrari, Ferrari.År;
(Jeg bruger År i stedet for Year. Access er lidt sart med at man bruger reserverede ord)
Tak for svar! Jeg tror vi nærmer os. Dit statement kører igennem uden fejl, og jeg får en meget lang liste. Jeg tilføjede 'Top 5' mellem DISTINCT og Ferrari.ID, så er der kun 5 på listen, men sorteringen er skæv. Jeg skulle gerner have de 5 seneste, dvs. med de højeste 'ActivityId' ... det driller stadig.
Jeg prøvede at tilføje min oprindelige sortering (ORDER BY ActivityId DESC), men så fejler den med syntax error.
Kan du gennemskue, hvordan jeg får sorteringen med, så jeg får de senest rettede?
Sorry. Havde lige glemt Top 5. Nedenstående kører hos mig:
SELECT DISTINCT TOP 5 Ferrari.ID, Max(ActivityLog.ActivityID) AS MaksOfActivityID, Ferrari.size, Ferrari.ferrari, Ferrari.År FROM Ferrari INNER JOIN ActivityLog ON Ferrari.ID = ActivityLog.ActivityItemId GROUP BY Ferrari.ID, Ferrari.size, Ferrari.ferrari, Ferrari.År ORDER BY Max(ActivityLog.ActivityID) DESC;
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.