Sql Subquery

Status
Niet open voor verdere reacties.

anlag1

Gebruiker
Lid geworden
31 okt 2010
Berichten
144
Hallo allemaal,

Ik heb een tabel zie bijlage hiervan wil ik alleen de records terug zien van elke BDLNO met hoogste BDLREV.
Onderstaand de query, ik krijg echter de mededeling dat deze query max. één record aan resultaat kan hebben.
wat doe ik fout

Code:
SELECT TOP 1 tbl_bundle_revisions.BDLNO, tbl_bundle_revisions.BDLREV, tbl_bundle_revisions.BDLREVSTS
FROM tbl_bundle_revisions
WHERE tbl_bundle_revisions.BDLNO = (SELECT DISTINCT  tbl_bundle_revisions.BDLNO FROM  tbl_bundle_revisions)
ORDER BY tbl_bundle_revisions.BDLREV;
ScreenHunter_79 Apr. 28 19.00.jpg

Groet,
André
 
Je weet duidelijk niet wat Top 1 doet :). Daarmee maak je een selectie, en daar laat je (nu) 1 record van zien. Welke dat is, hangt van je sortering af. Volgens mij kun je met een Totalen query en Max voor het veld BDLREV al uit de voeten.
 
Thnx,

Zit aardig in de goede richting, maar weet niet wat ik met BDLREVSTS aan moet, krijg daar niet de juiste informatie.

Code:
SELECT tbl_bundle_revisions.BDLNO, Max(tbl_bundle_revisions.BDLREV) AS MaxVanBDLREV, tbl_bundle_revisions.BDLREVSTS
FROM tbl_bundle_revisions
GROUP BY tbl_bundle_revisions.BDLNO;

Gr.
André :confused:
 
Een Totalenquery moet ofwel een functie hebben op een veld (Max, Last etc) ofwel een GROUP BY. Het veld BDLREVSTS heeft geen van beide.
Code:
SELECT BDLNO, Max(BDLREV) AS MaxVanBDLREV, BDLREVSTS
FROM tbl_bundle_revisions
GROUP BY BDLNO, BDLREVSTS;
zou dan moeten werken.
 
Code:
SELECT BDLNO, Max(BDLREV) AS MaxVanBDLREV, BDLREVSTS
FROM tbl_bundle_revisions
GROUP BY BDLNO, BDLREVSTS;
Deze code levert onderstaande records op, ik had één record verwacht voor 1237 :rolleyes:

ScreenHunter_79 Apr. 30 14.47.jpg

:confused:
 
Groeperen doe je per veldsamenstelling. Dus als je alleen op veld [BDLNO] groepeert, kun je met Max(BDLREV) het hoogste nummer terugvinden. Zet je vervolgens het veld [BDLREVSTS] ernaast, dan is dat een nieuwe groepering die je toevoegt de andere groepeeroptie. Er worden nu groepen gemaakt op basis van [BDLNO] + [BDLREVSTS]. Dus krijg je meer records. Je zult dus een functie moeten gebruiken die één waarde oplevert voor [BDLREVSTS], en op dat veld niet groeperen. Je kunt LAST eens proberen. Maar goede kans dat Last([BDLREVSTS]) clasht met Max([BDLREV]), in die zien dat het niet de juiste waarde laat zien. De enige manier is om dat veld als query toe te voegen denk ik. Maar je kunt de juiste waarde alleen terugvinden op basis van het unieke recordID, dat je nu niet in je query hebt staan.
 
Michel,
Dank voor de uitleg, met Last([BDLREVSTS]) werkt de query zoals gewenst :thumb:
Groet,
André :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan