|
| 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
| |
|
|