Jump to content
  • 0

Let functie sorteren op leeftijd met naam als resultaat


martindes

Question

Posted

Ik begrijp nog steeds niet helemaal hoe ik een Let functie moet gebruiken.

 

Ik heb een tabel COUREURS met de velden

COUREURS::Leeftijd bij debuut

COUREURS::Coureurnaam

COUREURS::ID_Record (globaal veld met de waarde "1")

 

Ik heb een andere tabel RECORDS waar ik alle records in wil verzamelen. Bijvoorbeeld de jongste debuut leeftijd van een coureur. In die RECORDS tabel heb ik maar één record. De waarde van het ID_Record is ook 1 en deze heb ik als relatie gebruikt met de COUREUR tabel.

 

Ik heb nu de volgende berekening in de tabel RECORDS

 

Let([

l=List(Records | COUREURS::Leeftijd bij debuut);

s=LeftValues(SortList ( l ; "Asc" ; "Number" );"1")

];

 

Evalueren(Substitute(s;"¶";"+")&"0")

 

)

 

Die werkt maar ik krijg dan de leeftijd van de coureur als resultaat. Kan ik in diezelfde Let formule ook de naam van de coureur als resultaat krijgen?

5 answers to this question

Recommended Posts

  • 0
Posted

Een Let kun je gebruiken om meerdere bewerkingen in 1 calculatie te gebruiken.

 

bv

 

Let([

a=2;

b=3

];

a+b

)

 

Voor het bepalen van jongste coureur kun je ook de functie Min gebruiken, in jouw geval Min(COUREURS::Leeftijd bij debuut)

 

Om zowel de laagste leeftijd als de bijbehorende naam op te halen is een ExcecuteSQL het meest efficient, je kunt dan meerdere

velden ophalen.

 

Zo zou je formule kunnen worden:

 

let([

rec= getvalue(ExecuteSQL("SELECT \"Leeftijd bij debuut\", \"Coureurnaam\"

FROM \"COUREURS\"

ORDER BY \"Leeftijd bij debuut\" ASC"

; "_" ; "¶");1) ;

leeftijd=leftwords(rec;1);

naam=middlewords(rec;2;20)

];

naam & " op " & leeftijd &" jarige leeftijd"

)

 

Waarbij met de ExceuteSQL een lijst wordt opgehaald van de leeftijden + namen, gesorteerd op leeftijd

met de Getvalue() wordt de eerste regel gepakt, en verderop worden de leeftijd en naam uitgesplitst die weer

in een andere volgorde als resultaat worden gegeven.

 

Groet, Ruben

leeftijd.fmp12

  • 0
Posted

Dank je.

 

Hoe kan ik met een WHERE clausule ervoor zorgen dat alleen de records uit de tabel worden meegenomen waar het aantal races gereden hoger dan 0 is?

 

Ik heb dit geprobeerd maar dat werkt niet

 

Let([

rec= GetValue(ExecuteSQL("SELECT \"Leeftijd bij debuut\", \"Coureur_calc\"

FROM \"COUREURS\"

WHERE \"Aantal starts\" >0 &

ORDER BY \"Leeftijd bij debuut\" ASC"

; "_" ; "¶");1) ;

leeftijd=LeftWords(rec;1);

naam=MiddleWords(rec;2;20)

];

naam & " op " & leeftijd &" jarige leeftijd"

)

  • 0
Posted

Dank je. Het begint een beetje duidelijk te worden hoe zo'n ExecuteSQL werkt.

 

Ik heb nog twee vragen.

1. Wat doet de regel ; "_" ; "¶" in deze calculatie?

2. Kan ik ook herhalende velden in de ExecuteSQL gebruiken? Bijvoorbeeld een herhalend veld van 10 waarbij ik de lijst krijg met de 10 jongste resultaten?

(Ik heb een relatie gemaakt als test en die werkt. Alleen de ExecuteSQL doet het dan niet. Volgens mij moet ik een regel toevoegen waarbij ik opdracht geef om de 10 jongste resultaten te plakken in de 10 afzonderlijke herhalingen van het veld.

 

Let([

rec= GetValue(ExecuteSQL("SELECT \"Leeftijd\", \"ID_Coureur\"

FROM \"Coureurs\"

ORDER BY \"Leeftijd\" DESC"

; "_" ; "¶");1) ;

id=MiddleWords(rec;2;20)

];

id

)

  • 0
Posted

Ik heb het op een andere manier opgelost met flags. Die ExecuteSQL's vraten alle performance op van mijn database.

 

Wel bedankt voor de antwoorden. Het is me in ieder geval meer duidelijk geworden hoe die ExecuteSQL in de basis werkt.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...