[SQL] Per GROUP, één "record" teruggeven

Pagina: 1
Acties:

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 22-03 20:57
Goedemorgen allemaal,

Ik ben bezig om verschillende user-database samen te voegen in 1 centrale database. Simpel voorgesteld zit ik met het volgende probleem :

Onderstaande tabel bevat naast de twee genoemde velden nog een aantal velden die ik hier niet noem, maar wel wil retourneren.

code:
1
2
3
4
5
6
7
8
9
Veld1       Veld2

  1       1
  1       2 *
  2       3 *
  2          1  
  3       1
  3       5
  3       7 *


Nu wil ik de met een * gemarkeerde records terughebben, dus per waarde van Veld1 de hoogste van Veld2 plus de daarbij behorende velden.

Het is een beetje een "hier is mijn probleem, dus help mij" topic, maar ik ben hier al de hele ochtend over aan het nadenken en ik kom er met combinaties van GROUP BY / SORT / TOP niet echt uit. Wie brengt mij het licht ! :)

SIZE does matter.
"You're go at throttle up!"


Verwijderd

iets als

select veld1, max(veld2) as veld2max group by veld1

?

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 22-03 20:57
Dat werkt goed als ik inderdaad met alleen deze twee kolommen werk, maar ik heb ook nog een stuk of tien kolommen met informatie erachter staan. Als ik deze in de SELECT en de GROUP BY erbij zet, dan werkt die hele MAX() niet goed meer.

code:
1
2
3
SELECT Veld1, MAX(Veld2) 
WHERE Veld1 = 3
GROUP BY Veld1


resulteert netjes in 3 - 7, maar zodra ik de overige kolommen erbij zet krijg ik gewoon weer 3 rows (1/5/7) terug.

SIZE does matter.
"You're go at throttle up!"


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 22-05 23:13

The Eagle

I wear my sunglasses at night

Iets als:

code:
1
select * from tabel where veld 1 = (select distinct(veld 1) from tabel where max(veld2) )


:?
Mijn SQL is wat roestig, maar ik denk dat je dit niet zonder subselect op gaat kunnen lossen

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • eborn
  • Registratie: April 2000
  • Laatst online: 22-05 16:58
Het is een bekend 'probleem'. Kijk maar eens op http://dev.mysql.com/doc/...mum-column-group-row.html

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 22-05 11:36
Zoiets?

code:
1
2
3
4
5
6
7
8
SELECT * FROM tabel t1
  JOIN 
   (SELECT veld1, MAX(veld2) AS veld2
      FROM tabel 
      GROUP BY veld1
     ) t2 
  ON t1.veld1=t2.veld1 AND 
     t1.veld2=t2.veld2

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
staan er in de overige kolommen wel dezelfde getallen??? Of staan er daar ook verschillen in???

want group by veld1,veld3,veld4 zegt gewoon dat de combo van veld 1+3+4 uniek moet zijn.

Indien veld 3,4 verschillende data kunnen bevatten, dan moet je eens gaan kijken naar subquery's.

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 22-05 11:36
Waarom mysql documentatie? TS noemt TOP als keyword en die komt niet voor bij MySQl.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 22-03 20:57
jvdmeer schreef op 22 september 2004 @ 11:54:
Zoiets?

code:
1
2
3
4
5
6
7
8
SELECT * FROM tabel t1
  JOIN 
   (SELECT veld1, MAX(veld2) AS veld2
      FROM tabel 
      GROUP BY veld1
     ) t2 
  ON t1.veld1=t2.veld1 AND 
     t1.veld2=t2.veld2
_/-\o_ waarom ik zelf niet in die richting (subquery's) ben gaan denken vandaag is me een raadsel, maar dit werkt wunderbar ! :)

SIZE does matter.
"You're go at throttle up!"


  • eborn
  • Registratie: April 2000
  • Laatst online: 22-05 16:58
jvdmeer schreef op 22 september 2004 @ 11:58:
Waarom mysql documentatie? TS noemt TOP als keyword en die komt niet voor bij MySQl.
Mijn fout, ik dacht MySQL gezien te hebben in de title ;) Samen met het feit dat ik persoonlijk al snel aan een subquery dacht, had ik even het idee dat subqueries niet mogelijk waren ;)

Overigens staat er in dat stukje documentatie ook een oplossing die van subqueries gebruik maakt.

[ Voor 33% gewijzigd door eborn op 22-09-2004 13:28 ]


  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 12-05 15:26

Eelke Spaak

- Vlad -

edit:
Hmm volgens mij snapte ik net je probleem niet helemaal en is dit dus een domme opmerking...


Je moet ook groeperen op de andere velden, dus:

SQL:
1
2
3
SELECT Veld1, MAX(Veld2) AS maximum, Veld3, Veld4
FROM tabelletje
GROUP BY Veld1, Veld3, Veld4

[ Voor 25% gewijzigd door Eelke Spaak op 22-09-2004 14:39 ]

TheStreme - Share anything with anyone

Pagina: 1