martindes Posted March 16, 2016 Posted March 16, 2016 Ik heb een calculatie nodig voor mijn Formule 1 database om uit een reeks een aantal hoogste waardes bij elkaar op te tellen. Bijvoorbeeld. In bepaalde seizoenen hadden ze 16 races maar telde alleen de 10 beste resultaten. In andere seizoenen hadden ze 10 races en telde alleen de beste 6 resultaten. Kan iemand mij uitleggen welke calculatie methode ik hiervoor nodig heb? Met vriendelijke groet en dank voor de antwoorden. Quote
0 Infomatics Posted March 16, 2016 Posted March 16, 2016 totalen.fmp12Ik zou een lijst maken van alle uitslagen, deze sorteren, hoogste eerst en dan de eerste 6 of 10 bij elkaar optellen. de formule voor de hoogste 10 zou dan worden: (waarbij ik de custom functie 'SortList' gebruik voor het sorteren)) Let([ l=List(waardes::waardes); s=LeftValues(SortList ( l ; "des" ; "Number" );10) ]; Evaluate(Substitute(s;"¶";"+")&"0") ) Groet, Ruben Quote
0 martindes Posted March 16, 2016 Author Posted March 16, 2016 Dank je. Misschien kan je even kijken naar mijn voorbeeld in het andere topic wat ik heb geplaatst over sum in de portalen. Want in dat voorbeeld zou het dan moeten staan. Voor elk seizoen moet er nl een mogelijkheid zijn om die totalen in te vullen. Quote
0 Infomatics Posted March 16, 2016 Posted March 16, 2016 Hier dan een kombinatie van de 2 bestanden. Je kunt nu bij het seizoen aangeven of het de eerste 6 of 10 waardes is. Groet, Ruben F1_test.fmp12 Quote
0 menno Posted March 16, 2016 Posted March 16, 2016 Ik heb een calculatie nodig voor mijn Formule 1 database om uit een reeks een aantal hoogste waardes bij elkaar op te tellen. Bijvoorbeeld. In bepaalde seizoenen hadden ze 16 races maar telde alleen de 10 beste resultaten. In andere seizoenen hadden ze 10 races en telde alleen de beste 6 resultaten. Kan iemand mij uitleggen welke calculatie methode ik hiervoor nodig heb? Met vriendelijke groet en dank voor de antwoorden. Je kan met ExecuteSQL gemakkelijk de waarden krijgen die je zoekt. Als je dat in een let-functie combineert met een sum() en een evaluate(), dan wordt het ongeveer zoals dit: Let ( [ n = 6 ; //vul hier het aantal waarden dat je wilt gebruiken in seizoen = SeizoenID ; coureur = CoureurID ; query = "SELECT \"Punten\" " & "FROM \"Deelnames\" " & "WHERE \"Seizoen\"=? " & "AND \"Coureur\" = ? " & "ORDER BY \"Punten\" DESC " & "FETCH FIRST " & n & " ROWS ONLY" ] ; Evaluate ( "SUM(" & ExecuteSQL ( query ; "" ; ";" ; seizoen ; coureur ) & ")" ) Je moet zelf nog wel even de juiste veldnamen en tabelnaam invullen, maar je hoeft geen relaties te leggen etc. Quote
0 martindes Posted March 17, 2016 Author Posted March 17, 2016 Dank jullie wel. Het ExecuteSQL script krijg ik trouwens niet werkend. Ik ga me daar eerst in verdiepen hoe dat werkt zodat ik dat eventueel ook kan gebruiken. Ik ga het nog complexer maken. Er zijn races geweest waar de eerste plaats gedeeld werd. De punten van die eerste plaats werden dan ook gedeeld. Dus bijvoorbeeld 1. Fangio 9 punten 2. Farina 6 punten 3. Villoresi 3 punten of 1. Farina 4,5 punten 1. Villoresi 4,5 punten 2. Farina 3 punten 2. Ascari 3 punten Quote
0 menno Posted March 17, 2016 Posted March 17, 2016 ExecutSQL is geen script, maar een formule en wat je in het voorbeeld ziet krijg je werkend wanneer je in de tabel met de deelnames van de coureurs bent. Je moet alleen wel de veldnamen en de tabelnamen aanpassen aan jouw omgeving. Het lijkt me beter voor jouw begrip van de techniek om eerst de eerste wens werkend te maken en daarna "het nog moeilijker te maken". Nu je er echter de vraag hier stelt, heb ik een tegenvraag: wat wil je nou eigelijk weten cq wat is jouw eigen definitie van "het beste resultaat"? Is dat het hoogste aantal punten of is dat de hoogst behaalde plaats in een race? Uit het antwoord volgt de vraag die je aan de database moet stellen. Quote
0 martindes Posted March 17, 2016 Author Posted March 17, 2016 @menno Het gaat om de beste resultaten uit een reeks. Bijvoorbeeld. 1e plaats = 10 punten 2 plaats = 6 punten 3 plaats = 4 punten Bij deze reeks 1, 1, 2, 3, 3, 1, 1, 2. Totaal 60 punten Ik moet in dat geval de beste 6 resultaten hebben. De twee 3e plaatsen vallen in dit geval af. Totaal 52 punten Ik heb alleen de punten nodig. Quote
0 menno Posted March 17, 2016 Posted March 17, 2016 Ik heb in jouw voorbeeld even de klassementsplaats in de tabel "Race_LineItems" toegevoegd (kolom = plaats) en ingevuld. In diezelfde tabel heb ik ook de kolom "SeizoenResultaat" met de ongeïndexeerde Let/Evaluate/ExecuteSQL berekening.F1_SQL.zip Quote
0 martindes Posted March 18, 2016 Author Posted March 18, 2016 @menno Ik ga me eerst maar eens verdiepen in de ExecuteSQL materie. Ik ben erg dankbaar voor de antwoorden en voorbeelden die ik krijg van iedereen maar ik wil het uiteindelijk uiteraard ook begrijpen hoe het werkt. Dank in ieder geval voor je antwoord. Quote
Question
martindes
Ik heb een calculatie nodig voor mijn Formule 1 database om uit een reeks een aantal hoogste waardes bij elkaar op te tellen.
Bijvoorbeeld.
In bepaalde seizoenen hadden ze 16 races maar telde alleen de 10 beste resultaten.
In andere seizoenen hadden ze 10 races en telde alleen de beste 6 resultaten.
Kan iemand mij uitleggen welke calculatie methode ik hiervoor nodig heb?
Met vriendelijke groet en dank voor de antwoorden.
9 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.