[asp/sql] max per group werkt niet helemaal correct

Pagina: 1
Acties:

  • bgrr
  • Registratie: Oktober 2001
  • Niet online
Hoi tweakers

In een onlangs geschreven veiling site in asp en sql ben ik volgende fout volgende tegengekomen bij het selecteren van data.

code:
1
2
3
4
5
6
7
8
9
tabel : tabel_biedingen

bod     kavel    naam
 75       1       barry
 25       1       truus
 87       2       bert
 75       2       jaap
 50       2       jan
100       3       miep


Hier voer ik de volgende sql op uit om het hoogste bod per kavel te krijgen (max per group)

code:
1
2
3
4
SELECT tabel_biedingen.kavel, tabel_biedingen.bod, tabel_biedingen.naam
FROM tabel_biedingen
WHERE (((tabel_biedingen.bod) In (SELECT  MAX(BOD) FROM tabel_biedingen Group BY kavel)))
ORDER BY tabel_biedingen.kavel;



Ik krijg dan deze data terug uit de selectie als volgt....
code:
1
2
3
4
5
bod     kavel    naam
 75       1       barry
 87       2       bert
 75       2       jaap
100       3       miep



Van kavel 2 komen er ineens 2 regels data terug ipv van alleen het hoogste bod van kavel 2.

Dit probleem doet zich alleen voor als het hoogste bod van een kavel bij een van de andere kavels nogmaals voorkomt als bod. Dan krijg ik voor kavel (2) ineens twee regels data terug.... Als de biedingen van de kavels allemaal uniek zijn en dus bedragen niet meerdere malen voorkomen dan werkt t wel perfect en krijg ik netjes t hoogste bod per kavel...

Heb allerlei sites en fora zitten napluizen over het gebruik van max per group in sql, maar t blijkt toch een stuk lastiger te zijn dan ik verwacht. Ik zie niet waar of waarom het fout gaat...

Iemand die mij verder kan helpen ??

Op verzoek kan ik de files en een werkende site als voorbeeld laten zien...

  • maxmaxmax
  • Registratie: Juli 2003
  • Laatst online: 07-12-2025
wellicht kun je dit eens proberen: select top 1

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Je moet je niet group by gebruiken ipv order by?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Nee, dat is de oplossing niet, het probleem is dat 75 twee keer voorkomt. Je doet een select MAX(bloebla) IN ... die je niet afbakent.

Je kunt beter het kavel van de buitenste query matchen met die in je binnenste query. Magie? Valt wel mee hoor:

code:
1
2
3
4
5
6
7
SELECT tabel_biedingen.kavel, tabel_biedingen.bod, tabel_biedingen.naam
FROM tabel_biedingen tb1
WHERE ( tabel_biedingen.bod In (
   SELECT  MAX(BOD) FROM tabel_biedingen tb2 
   WHERE tb2.kavel = tb1.kavel Group BY kavel)
)
ORDER BY tabel_biedingen.kavel;


ps: haakjes zijn prima, maar jij gebruikt wel een grote hoeveelheid extra

  • bgrr
  • Registratie: Oktober 2001
  • Niet online
bigbeng schreef op 08 juni 2004 @ 11:04:
Nee, dat is de oplossing niet, het probleem is dat 75 twee keer voorkomt. Je doet een select MAX(bloebla) IN ... die je niet afbakent.

Je kunt beter het kavel van de buitenste query matchen met die in je binnenste query. Magie? Valt wel mee hoor:

code:
1
2
3
4
5
6
7
SELECT tabel_biedingen.kavel, tabel_biedingen.bod, tabel_biedingen.naam
FROM tabel_biedingen tb1
WHERE ( tabel_biedingen.bod In (
   SELECT  MAX(BOD) FROM tabel_biedingen tb2 
   WHERE tb2.kavel = tb1.kavel Group BY kavel)
)
ORDER BY tabel_biedingen.kavel;


ps: haakjes zijn prima, maar jij gebruikt wel een grote hoeveelheid extra
Heb deze query geprobeerd maar dan krijg ik geen resultaat. Als ik de query in acces probeer vraagt ie ook om parameter waarden...

Is het goed als ik de de db mail, mocht je nog een keer mij willen helpen uiteraard. Lijkt me dat als je kunt proberen in de db dat t allemaal wat makkelijker is.


Oh de vele (( en )) worden door access gedaan. Ik ben helemaal nieuw op t gebied van ASP en SQL. Dus een SQL command uit t hoofd bedenken lukt me momenteel nog niet....

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Welke parameter vraagt Access? Bod waarschijnlijk?

En mag ik je aanraden een SQL tutorial te gaan volgen? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Tony diNovo
  • Registratie: Maart 2004
  • Laatst online: 05-06-2025
code:
1
2
3
4
SELECT tabel_biedingen.kavel, MAX(tabel_biedingen.bod) AS maxbod, tabel_biedingen.naam
FROM tabel_biedingen
GROUP BY tabel_biedingen.kavel, tabel_biedingen.naam
ORDER BY tabel_biedingen.kavel;


Volgens mij als je een MAX(bod) wilt hebben kun je het beter zo doen. Dan krijg je direct de goede waarden eruit. Of begrijp ik het verkeerd?

http://specs.tweak.to/9537


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Tony diNovo schreef op 10 juni 2004 @ 09:46:
code:
1
2
3
4
SELECT tabel_biedingen.kavel, MAX(tabel_biedingen.bod) AS maxbod, tabel_biedingen.naam
FROM tabel_biedingen
GROUP BY tabel_biedingen.kavel, tabel_biedingen.naam
ORDER BY tabel_biedingen.kavel;


Volgens mij als je een MAX(bod) wilt hebben kun je het beter zo doen. Dan krijg je direct de goede waarden eruit. Of begrijp ik het verkeerd?
Group by en order by in één query mag geloof ik sowieso niet, dat pikt alleen MySQL. Zonder die order by zou het wel moeten werken lijkt me. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 11:37
Waarom mag ORDER BY en GROUP BY niet in een query? Zijn twee hele andere dingen toch?

Edit heb het ook even getest:
code:
1
2
3
SELECT Max(Table1.bod) AS MaxOfbod, Table1.kavel, Table1.naam
FROM Table1
GROUP BY Table1.kavel, Table1.naam;

Werkt niet goed, er worden dubbele records opgehaald

code:
1
2
3
SELECT t1.bod, t1.kavel, t1.naam
FROM Table1 AS t1
WHERE (t1.bod IN (SELECT MAX(t2.bod) FROM Table1 t2 WHERE t1.kavel = t2.kavel));

Werkt prima (tabel heet bij mij alleen Table1)

[ Voor 71% gewijzigd door sig69 op 10-06-2004 09:58 ]

Roomba E5 te koop


  • Tony diNovo
  • Registratie: Maart 2004
  • Laatst online: 05-06-2025
Welke DBMS wordt er trouwens gebruikt? Access begrijp ik?

Order by en group by in een query mag trouwens sowieso in Oracle, SQL Server en Access waar ik dan mee werk. Die gebruik ik wel vaker. :)

http://specs.tweak.to/9537


  • bgrr
  • Registratie: Oktober 2001
  • Niet online
Bedankt voor jullie reacties...

Ik ga nu nog effe stoeien met de tips en voorbeelden die jullie geleverd hebben...


Verdere info.

Het is idd een acces db. Welke via odbc aangesproken wordt door een asp pagina.

Voor diegene die nog willen helpen cq stoeien met max per group t probleem heb ik de asp-pagina en de acces db online gezet.

Met de data die er nu inzit krijg je de foute dubbele data voor kavel 2...

De query's zitten er ook in... Welke deze fout veroorzaakt.


Wel de query posten mocht iemand t lukken he ;-)

http://217.123.173.11/veiling.zip

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 11:37
De goede query staat ^^

Roomba E5 te koop


  • bgrr
  • Registratie: Oktober 2001
  • Niet online
Sig96 Idd, de query is perfect....


Mag ik je via deze weg heel erg bedanken voor de tijd en moete die er hebt gestoken voor mij.


Barry

  • bgrr
  • Registratie: Oktober 2001
  • Niet online
bgrr schreef op 11 juni 2004 @ 09:45:
Sig96 Idd, de query is perfect....


Mag ik je via deze weg heel erg bedanken voor de tijd en moeite die er hebt gestoken voor mij.


Barry
oeps foutje

[ Voor 4% gewijzigd door bgrr op 11-06-2004 10:22 ]

Pagina: 1