Acces steeds het hoogste cijfer laten kiezen bij Primary Key

  • Onderwerp starter Onderwerp starter VJJK
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

VJJK

Gebruiker
Lid geworden
14 okt 2010
Berichten
47
Dag best helpmij forum..

Ik zit met het volgende, vanuit een sql database (waar ik verder niet bij kan) wordt elke nacht een update geschreven in de vorm van een csv bestand (welke ik verder oppik)

Nu is het zo dat elke regel een cijfer meekrijgt. Waarbij het voor mij noodzaak is om telkens het record behorende bij het hoogste cijfer te nemen.

Ter verduidelijking

[table="width: 500, class: dotted"][tr][td]Name [/td][td] Code [/td][td] order-line[/td][/tr]
[tr][td]Flowmeter [/td][td] J20005 [/td][td] 12[/td][/tr]
[tr][td]Flowmeter [/td][td] J20005 [/td][td] 13[/td][/tr]
[tr][td]Flowmeter [/td][td] J20005 [/td][td] 14[/td][/tr][/table]


Hoe krijg ik het voor elkaar dat als ik de code op primary zet dat telkens de hoogste order-line gekozen wordt?

Alvast bedankt en ik hoop dat mijn vraag een beetje duidelijk is.

VJJK
 
Moet je eerst de regel met het hoogste nummer in veld order-line opzoeken, dat kun je met de volgende query doen:
SELECT MAX([order-line] FROM [JouwTabel]

Vervolgens moet je het complete record met het gevonden hoogste nummer in veld order-line ophalen, dan komt de complete query er als volgt uit te zien:
SELECT * FROM [JouwTabel] WHERE [order-line] IN (SELECT MAX([order-line] FROM [JouwTabel])
 
Beste Bartuls,

bedankt voor je bericht, ik heb het op alle mogelijkheden geprobeerd maar zonder succes. Krijg of een syntax error of een JOIN error.

verder lijkt het mij ook omslagtig om 2 verschillende queries te laten lopen, dit moet toch in een keer kunnen? of begrijp ik het verkeerd.

Op dit moment is mijn SQL code waar deze ingevoegd moet worden als volgt. Vanuit een form kan ik aangeven welk onderdeel ik specifiek naar boven wil halen. Als ik dat doe, dan krijg ik alle verschillende "order-lines" mee (soms wel 24 op een order) ik wil in dat geval allen het record zien waarbij de order-line het hoogste getal heeft.

Kan je hier iets mee? Alvast bedankt.

[SQL]SELECT [Shipment_lines_NL548100 BP Program].poref, [Shipment_lines_NL548100 BP Program].order_title, [Shipment_lines_NL548100 BP Program].povname, [Shipment_lines_NL548100 BP Program].rcsseq, [Shipment_lines_NL548100 BP Program].ETA_dt, [Shipment_lines_NL548100 BP Program].Recvd_compl, [Shipment_lines_NL548100 BP Program].rcsbase
FROM [Shipment_lines_NL548100 BP Program]
WHERE (((IIf(IsNull([Forms]![NL548100sel]![Combo0]),True,[shipment_lines_nl548100 BP Program].[rcsbase]=[Forms]![NL548100sel]![Combo0]))<>False));[/SQL]
 
En in welk veld staat het order-line? Ik zie dat niet terug in je query.
 
Dag Octafish,

Zie inderdaad dat ik waarschijnlijk de verkeerde query neergezet heb.

Deze is het

[SQL]SELECT [Shipment_lines_NL548100 BP Program].poref, [Shipment_lines_NL548100 BP Program].order_title, [Shipment_lines_NL548100 BP Program].povname, [Shipment_lines_NL548100 BP Program].rcsseq, [Shipment_lines_NL548100 BP Program].ETA_dt, [Shipment_lines_NL548100 BP Program].Recvd_compl, [Shipment_lines_NL548100 BP Program].rcsbase, [Shipment_lines_NL548100 BP Program].Order_line, [Shipment_lines_NL548100 BP Program].rcsitem
FROM [Shipment_lines_NL548100 BP Program]
WHERE (((IIf(IsNull([Forms]![NL548100sel]![Combo0]),True,[shipment_lines_nl548100 BP Program].[rcsbase]=[Forms]![NL548100sel]![Combo0]))<>False));[/SQL]

Inmiddels heb ik iets verder gezocht en het lijkt alsof ik eerst alle specifieke items moet "groupen" en daar dan de hoogste order_line van nemen. Maar kom er niet uit hoe dit precies moet.

Enig idee?
 
eueuehhhh,
Volgens mij nog steeds de verkeerde query....
In de WHERE clausule selecteer je nergens het record met het hoogste nummer.
Ook staat er alleen een IIF statement in je WHERE clausule. Daar zul je inderdaad een foutmelding op gaan krijgen.

Tip:
Breng je probleem eerst even terug tot een behapbare grootte.
Maak een kleine database met de kern van je probleem (tabellen met weinig velden en records).
Werk daar de oplossing in uit.
Heb je hem werkend, schaal hem dan op naar de plek waar die nodig is.
 
Dag Bartuls en OctaFish,

ik heb in de bijlage een kleine database als voorbeeld bijgevoegd.

Via het form, kan ik de query laten lopen. Echter, zie ik dan alle order_lines.

Ik denk dat ik de uitleg van Bartuls niet helemaal begrijp, zodoende hoop ik hiermee voor verduidelijking te zorgen.Bekijk bijlage Voorbeeld order lines.zip
 
Ik ben er inmiddels ook achter dat ik met de MAX functie, daadwerkelijk het hoogste getal uit de database filter.

Dit is echter niet hetgeen waar ik naar op zoek ben. Ik ben op zoek naar een oplossing om per project [First] per ordernummer [second] de hoogste [order_line] te tonen.

Dit moet toch mogelijk zijn?
 
Dan krijg je zoiets:

[SQL]SELECT Voorbeeld.First, Voorbeeld.Second, Voorbeeld.Name, Voorbeeld.Order_line
FROM Voorbeeld
WHERE (((Voorbeeld.First) In (select First from voorbeeld where [First]=[Forms]![vbform]![Combo0])) AND ((Voorbeeld.Order_line) In (select max(order_line) from voorbeeld where [First]=[Forms]![vbform]![Combo0])));
[/SQL]
 
Hi Octafish,

De grap hierbij is dat hij nog steeds het hoogste (max) getal aangeeft van alle order lines.

Zo krijg ik van deze SQL query alleen de regel terug waarbij order_line het hoogst is.

Ik krijg dus niet alle verschillende ordernummers [second] te zien.

Op een of andere manier zou ik eerst moeten groupen naar [first] dan naar [second] en zorgen dat in die bundel per [second] de (max) gekozen wordt.

Maar ik ben erachter denk ik. het leven kan soms zo makkelijk zijn.

Ik maak een append query naar een tabel waarin de primary staat op [second] waarin ik de orderlines descending laat sorteren. op deze manier pakt Access telkens het eerste record (met het hoogste order_line) en plaatst deze in de nieuwe tabel. Uiteindelijk levert mij dit een tabel op waarin alleen de hoogste order_lines worden getoond per [second]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan