Hoogste waarde

Status
Niet open voor verdere reacties.

Japsur

Gebruiker
Lid geworden
9 apr 2004
Berichten
650
Hallo,

Ik heb een query gemaakt die op zich correct werkt, maar er is toch nog iets wat niet goed functioneert.
In een kolom x vul ik waarden in, bijv. 799 (cm).
Nu heb ik een 2e kolom x die het clubrecord weergeeft van die categorie op dat onderdeel. Dat werkt ook goed. Dat is bijvoorbeeld in dit geval 795.
Nu moet hij in de 3e kolom x weergeven dat persoon x een nieuw clubrecord heeft gehaald. Dat doet ie ook goed.
maar soms gebeurt het dat er meer dan 1 persoon een nieuw clubrecord haalt. Dan geeft ie voor al die personen die hoger dan 795 hebben gehaald nieuw clubrecord. Bijv. 801 en 799. Nu wil ik hebben dat hij alleen voor diegene met de hoogste waarde (hier 801) aangeeft dat ie een nieuw cr heeft gehaald. (deze moet ergens anders in het programma worden geregistreerd namelijk). En niet die 799. (deze heeft ook wel hoger dan het 'oude' clubrecord, maar was niet de beste die keer).
Punt is ook nog: voor sommige onderdelen staat nog voor sommige categorieën geen clubrecord. Wanneer er dan een prestatie wordt neergezet is dit automatisch een clubrecord. Bij meerdere personen vormt dit wederom het probleem (zie hierboven)

De code die ik voor de 3e kolom x heb (waar dus wat in gesleuteld moet worden, waar ik dus niet uitkom) is als volgt:

CR?: IIf(IsNull([CR]);(IIf(IsNull([Kogelstoten]);"";"Clubrecord"));(IIf([Kogelstoten]>[CR];"Clubrecord";"")))

Heeft iemand een oplossing? graag reactie.
 
Je test alleen of iemand meegedaan heeft en of de gehaalde afstand groter is als het clubrecord.
Je moet nog een test toevoegen of de behaalde afstand de hoogste waarde is die in die wedstrijd behaald is (dat kun je doen met behulp van de dmax() functie). Alleen als aan die voorwaarde ook voldaan is heb je te maken met een nieuw clubrecord.
 
Ik heb het geprobeerd om met DMax te werken, maar als er ik dan nog steeds 2 meer heb dan het clubrecord, blijft ie er maar 2 aangeven.
Hoe zou de functie er volgens ongeveer uit moeten zien dan? Bij mij lukt het helaas niet.
 
Kun je je mdb even zippen en posten?
Dan schrijf ik even een functie die het voor je doet. Zonder de tabellen en veldnamen is dat erg lastig.
 
Heeft iemand een idee misschien?? Ik moet het binnenkort al kunnen gebruiken
 
Laatst bewerkt:
Op de manier hoe jij het hebt gemaakt kan ik je zo niet helpen.
Zou de opbouw van je gegevens anders doen. Dus sporten opslaan in een afzonderlijke tabel en niet bij de sporters zelf

Maar ik weet niet of je alles nog om kan zetten?

groeten Paul
 
Mummy probleem

Ingewikkeld probleem. Bartuls is er al bijna een maand mee bezig. Ik heb geen Access hier maar als je de structuur eens post: relevante tabel(len) en veldnamen dan zal ik eens kijken.

Weest gegroet,
Guus
 
Ik heb een tabel met namen van mensen en waar ik de uitslagen in zet.
Tevens heb ik nog een tabel met daarin per kolom bepaalde waarden.
het gaat over atletiek. Heb een systeempje gemaakt met daarin clubrecords. De 1e tabel (deelnemers jaar) is dus als volgt opgebouwd: naam, plaats, 40m, 60m, 80m, hoogspringen, verspringen etc etc. (alle onderdelen zeg maar). Nu is het zo, mensen worden in categorieën ingedeeld. MC, MD, JD, JpA (enz. in vb is het JD). Het gaat hier over kogelstoten (de rest werkt het dan hetzelfde.
Stel: het record van de JD bij kogelstoten is 7,99 meter. (tabel clubrecords)
Nu is probleem: ik heb een wedstrijd wanneer er 2 of meer mensen (JD) zijn die verder stoten dan 7,99 meter. Dan geeft de pc het nu aan dat deze 2 mensen beiden een clubrecord hebben gestoten (formule hiervan in query is als volgt: CR: (DMax(("[Kogelstoten]");("[Clubrecords]");"Categorie = '" & CStr([CK-Deelnemers jaar]!Categorie) & "'")). Hij zoekt dus hier de maximale waarde van het kogelstoten op per categorie. (in de uitslagen staan de categorieen door elkaar, maar dat werkt nu zo goed). Dus bij persoon x, categorie JD geeft ie aan: 7,99.
Vervolgens laat ik de pc controleren of het een clubrecord is of niet: CR?: IIf(IsNull([CR]);(IIf(IsNull([CK Kogelstoten]);"";"Clubrecord"));(IIf([CK Kogelstoten]>[CR];"Clubrecord";"")))
Tja en dan geeft ie bij iedereen van de JD die meer dan 7,99 heeft gestoten "clubrecord" aan. Maar dit kan niet, omdat alleen de verste het clubrecord op z'n naam kan schrijven.

En dit is mijn probleem. Ik hoop dat ik het nu wat duidelijker heb kunnen vertellen? Misschien kun je het nu zonder access ook?
 
Even kijken of ik je goed begrijp:

Een tabel met atleten een tabel met clubrecords en een tabel met uitslagen?

[terzijde]
Afgezien van het feit dat je database niet genormaliseerd is denk ik dat we er wel uitkomen.
Genormaliseerd zou zijn dat je je atleten en de sporten die ze beoefenen zou splitsen in drie tabellen: Atleten, Sporten en een tabel waarin je die twee combineert bijvoorbeeld AtleetSport
[/terzijde]

Selecteer het record van de sport uit clubrecords.
Selecteer uit de uitslagen de records waarvan deze boven de records liggen sorteer deze descending en pak de eerste:

Code:
Select * from Uitslagen where uitslag > (select max(score) from clubrecords)
Je moet hier nog de sport en eventueel de atleet aan koppelen. Ik weet dat dit niet een kant en klaar antwoord is maar werk hier even mee.


HTH
Weest gegroet,
Guus
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan