Avatar billede puddelundercover Nybegynder
29. januar 2009 - 09:14 Der er 10 kommentarer

Group by flere argumenter eller sortering i grupper?

Hej,

ID    BRUGER      SAG      UGE      TIMEFORBRUG
--------------------------------------------------
1      10          05      53        12           
2      15          05      55        18
3      19          07      54        9            <--
4      15          07      51        22
5      10          05      55        12            <--
6      15          07      49        7            <--
7      19          05      47        16            <--


Hvordan ville SQL-sætningen se ud, hvis man ville have en liste over højste og laveste timeforbrug pr sag, men kun med det nyeste timeforbrug pr bruger?

I dette eksempel skulle ID 3,5,6,7 blive valgt ud, og gerne resultere i at:

SAG    HØJESTE    LAVESTE
--------------------------
07    9          7
05    12        16

Giver dette mening?

Jeg forestillede mig at man skulle gruppere efter sag og vælge max() og min() af (brugere, sortere dette efter id desc). Men jeg kan ikke lige få det til at gå op... Nogen der har en god idé til en løsning?

- magnus
Avatar billede Slettet bruger
29. januar 2009 - 09:32 #1
Nej jeg synes den er lidt overskuelig din forklaring.

Kunne du evt. give et mysql_dump af din data, så man kan teste det?
Avatar billede Slettet bruger
29. januar 2009 - 09:32 #2
Et skud i tågen:

SELECT id, bruger, sag, uge, MAX(timeforbrug) as maks_time, MIN(timeforbrug) as min_time
FROM table
ORDER BY bruger
Avatar billede Slettet bruger
29. januar 2009 - 09:33 #3
SELECT id, bruger, sag, uge, MAX(timeforbrug) as maks_time, MIN(timeforbrug) as min_time
FROM table
ORDER BY bruger
GROUP BY sag
Avatar billede puddelundercover Nybegynder
29. januar 2009 - 09:39 #4
Hej, dette er et eksempel, min data ser ikke sådan ud.

Jeg kan ikke umiddelbart bare gruppere efter sag, da der jo er flere brugere pr. sag, og der kun må tages én post pr. bruger pr. sag...
Avatar billede arne_v Ekspert
31. januar 2009 - 03:17 #5
SELECT sag, MAX(timeforbrug) as maks_time, MIN(timeforbrug) as min_time
FROM table
GROUP BY sag

bør give det output du efterspørger i spørgsmålet.

Og vi er ligesom nødt til at tage udgangspunkt i dit spørgsmål.
Avatar billede puddelundercover Nybegynder
31. januar 2009 - 10:17 #6
Hej Arne,

Her vil den også risikere at tage to poster fra samme bruger pr. sag..

"...ville have en liste over højste og laveste timeforbrug pr sag, men kun med det nyeste timeforbrug pr bruger?"
Avatar billede arne_v Ekspert
01. februar 2009 - 18:24 #7
så prøv:

SELECT sag, MAX(timeforbrug) as maks_time, MIN(timeforbrug) as min_time
FROM tabel t1
WHERE uge = (SELECT MAX(uge) FROM tabel t2 WHERE t1.sag=t2.sag AND t1.bruger=t2.bruger)
GROUP BY sag

men grundliggende kan man ikke finde nyeste udfra uge nummer, da uge numre jo starter
forfra hvert år.
Avatar billede puddelundercover Nybegynder
01. februar 2009 - 18:33 #8
Det er sandt, men så kunne man måske smide årstallet foran, eller bruge ID.. Jeg må lige teste din sætning :-)
Avatar billede puddelundercover Nybegynder
30. april 2012 - 15:10 #9
arne_v vil du ikke lægge et svar så jeg kan lukke dette spørgsmål? :)
Avatar billede arne_v Ekspert
30. april 2012 - 15:22 #10
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester