Hej, håller på att bli knäpp på det här. Ska välja ut den tekniker som utfört en åtgärd flest gånger. Har flera olika tekniker utfört samma åtgärd flera gånger ska alla visas. Ok, nu efter mycket slit så har jag och en kompis fått ihop en fungerande variant som ger rätt (önskat) resultat. Här kommer lite input (inte så kunnigt...)Välja max ur varje grupp?
Mitt försök så här långt ser ut så här:select atgard, tekniker, max(times) as antal
from (select atgard , tekniker, count(*) as times from serviceatgard group by tekniker, atgard)
group by atgard, tekniker
having max(times) >= all(select max(times)
from serviceatgard group by atgard, tekniker)
Jag får ut rätt data men det begränsas inte till bara de som har utfört en åtgärd flest gånger. Jag får med antalet gånger på alla tekniker som har utfört en åtgärd. Jag vill alltså ha ut endast max antal utförda åtgärder per åtgärd/tekniker. Hoppas det var någorlunda begripligt förklarat.
Önskat resultat är alltså något i stil med:
atgard tekniker antal
1 nisse 3
1 kalle 3
2 åsa 5
3 georg 1
Sv: Välja max ur varje grupp?
Det känns dock inte som en vidare optimal lösning. Tar gärna lite input från någon kunnig om hur man skulle kunna banta ner den här frågan.
select tekniker,atgard, count(atgard) as antal
from serviceatgard
group by tekniker,atgard
having count(atgard)>=all(select max(summ)
from (select atgard, count(*) as summ
from serviceatgard
group by atgard,tekniker)
group by atgard)
or atgard not in (select atgard
from serviceatgard
group by tekniker,atgard
having count(atgard)>=all(select max(summ)
from (select atgard, count(*) as summ
from serviceatgard
group by atgard,tekniker)
group by atgard))
Sv:Välja max ur varje grupp?
Den är lite bantad (teckenmässigt iaf (ca 93 st)), vet inte om den är mer optimal dock.
<code>
SELECT c.atgard, c.tekniker, c.times FROM
(SELECT atgard, MAX(times) AS times FROM
(SELECT atgard, tekniker, COUNT(atgard) AS times
FROM serviceatgard
GROUP BY atgard, tekniker) AS a
GROUP BY atgard) AS b
JOIN
(SELECT atgard, tekniker, COUNT(atgard) AS times
FROM serviceatgard
GROUP BY atgard, tekniker) AS c
ON (b.atgard = c.atgard) AND (b.times = c.times)
</code>
/Håkan