/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
mysqlkald
Fra : Mads


Dato : 26-04-08 10:39

Hej gruppe

Jeg har en tabel der ser således ud:

id - user_id - vaegt - laengde - dato
1 - 1 - 4000 - 83 - 2008-26-04
2 - 1 - 3000 - 71 - 2008-21-03
3 - 1 - 5000 - 90 - 2008-22-04
4 - 2 - 1500 - 49 - 2008-10-02


Jeg vil gerne have at outputtet skal være den tungeste vægt fra hver
user_id altså således at user_id kun forekommer en gang:


id - user_id - vaegt - laengde - dato
3 - 1 - 5000 - 90 - 2008-22-04
4 - 2 - 1500 - 49 - 2008-10-02


Jeg har været ved at lure lidt på distinct men ved ikke om det er der
jeg skal lede.


Mads

 
 
Henrik Davidsen (26-04-2008)
Kommentar
Fra : Henrik Davidsen


Dato : 26-04-08 20:30

Jeg tror du skal kigge på GROUP BY:

SELECT id, user_id, max(vaegt), laengde, dato
FROM dinTabel
GROUP BY id, user_id, laengde, dato

Du skal altså gruppere på alle dine kolonner, pånær den ene hvor du bruger
en aggregate funktion (max).

/Sjang




Leif Neland (28-04-2008)
Kommentar
Fra : Leif Neland


Dato : 28-04-08 09:49


"Henrik Davidsen" <none@none.dk> skrev i en meddelelse
news:eoLQj.7387$RM1.2955@fe37.usenetserver.com...
> Jeg tror du skal kigge på GROUP BY:
>
> SELECT id, user_id, max(vaegt), laengde, dato
> FROM dinTabel
> GROUP BY id, user_id, laengde, dato
>
> Du skal altså gruppere på alle dine kolonner, pånær den ene hvor du bruger
> en aggregate funktion (max).
>
´
Duer ikke.

Det vil give een record for hver kombination af bruger, laengde og dato.

Det må laves som et subquery, hvor der først findes max(vaegt) pr user_id,
og derefter findes den record, hvor brugeren har denne vægt. Måske endnu et
subquery, hvor der findes den seneste dato, hvor brugeren har den vægt, og
så et query, der giver den record, med den kombination af brugerid,vægt og
dato, så man får laengden den dato, da vægten var højst.

For man kan jo ikke bare tage max(dato), max(laengde), max(vaegt) pr user_id

Leif




Mads (28-04-2008)
Kommentar
Fra : Mads


Dato : 28-04-08 10:11

On 28 Apr., 10:48, "Leif Neland" <l...@neland.dk> wrote:
> "Henrik Davidsen" <n...@none.dk> skrev i en meddelelsenews:eoLQj.7387$RM1.2955@fe37.usenetserver.com...> Jeg tror du skal kigge på GROUP BY:
>
> > SELECT id, user_id, max(vaegt), laengde, dato
> > FROM dinTabel
> > GROUP BY id, user_id, laengde, dato
>
> > Du skal altså gruppere på alle dine kolonner, pånær den ene hvor du bruger
> > en aggregate funktion (max).
>
> ´
> Duer ikke.
>
> Det vil give een record for hver kombination af bruger, laengde og dato.
>
> Det må laves som et subquery, hvor der først findes max(vaegt) pr user_id,
> og derefter findes den record, hvor brugeren har denne vægt. Måske endnu et
> subquery, hvor der findes den seneste dato, hvor brugeren har den vægt, og
> så et query, der giver den record, med den kombination af brugerid,vægt og
> dato, så man får laengden den dato, da vægten var højst.
>
> For man kan jo ikke bare tage max(dato), max(laengde), max(vaegt) pr user_id
>
> Leif

Tak for hjælpen - det blev Arne Vajhøjs kald der blev brugt dog
modificeret:
SELECT *, fusion_users.user_name, DATE_FORMAT(`dato`,'%d-%m-%Y') AS
dato FROM konkurrence t1, fusion_users
WHERE vaegt = (SELECT MAX(vaegt) FROM konkurrence t2 WHERE t2.user_id
= t1.user_id AND t2.user_id = fusion_users.user_id AND fiskeart_id=1)
GROUP BY user_name
ORDER BY vaegt DESC, laengde ASC
LIMIT 10

Mads

Arne Vajhøj (26-04-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 26-04-08 18:16

Mads wrote:
> Jeg har en tabel der ser således ud:
>
> id - user_id - vaegt - laengde - dato
> 1 - 1 - 4000 - 83 - 2008-26-04
> 2 - 1 - 3000 - 71 - 2008-21-03
> 3 - 1 - 5000 - 90 - 2008-22-04
> 4 - 2 - 1500 - 49 - 2008-10-02
>
>
> Jeg vil gerne have at outputtet skal være den tungeste vægt fra hver
> user_id altså således at user_id kun forekommer en gang:
>
>
> id - user_id - vaegt - laengde - dato
> 3 - 1 - 5000 - 90 - 2008-22-04
> 4 - 2 - 1500 - 49 - 2008-10-02

Prøv (hvis nyere MySQL):

SELECT *
FROM tbl t1
WHERE vaegt = (SELECT MAX(vaegt) FROM tbl t2 WHERE t2.user_id = t1.user_id)

Du har ikke angivet hvad der skal ske ved 2 ens vaegte - ovenstående
viser begge.

Arne


Søg
Reklame
Statistik
Spørgsmål : 177578
Tips : 31968
Nyheder : 719565
Indlæg : 6409072
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste