Query met één op meer relatie van de meer-tabel alleen record met jongste datum.

Status
Niet open voor verdere reacties.

OBADE

Gebruiker
Lid geworden
9 feb 2016
Berichten
93
Hallo,

Eigenlijk heel simpel (tenzij je het niet weet, zoals ik). ik heb een simpele query met een één op meer relatie tussen twee tabellen. Maar de query moet uitsluitend de records van de 'meer'-tabel met de jongste datum in het datumveld [peildatum] meenemen.

Hoe krijg ik dat voor mekaar? Het lijkt zo simpel, maar ik heb ff niet de oplossing.

Ik hoor graag.


Groeten,
OBADE.
 
Ik ga gewoon proberen een antwoord te geven, waarschijnlijk komen er nog wel wat extra antwoorden op.

Als je de Query geopend hebt, kun je de totalen ophalen van de query.
Bij datum kun je dan de kleinste datum selecteren.
Nadeel is wel, de totalen gaat over de gehele query heen, dus je zult er wat mee moeten puzzelen om de juiste, gewenste resultaten te voorschijn te halen.
 
Dank je wel DaFuzz, maar op die manier is het niet echt geautomatiseerd, zal ik maar zeggen. Ik weet van tevoren niet welke "jongste data" er zullen voorkomen, en met vinkjes moeten zetten kan ik de query niet echt opnemen in een toepassing/programma.
 
Ik weet niet of het antwoord van dafuzz voor jouw bruikbaar is, maar uit jouw antwoord maak ik op dat je het antwoord niet helemaal begrijpt. Met de knop Totalen krijg je een extra regel in je queryontwerp, waarmee je functies kunt gebruiken op velden. Daarbij maak je altijd unieke resultaten. Oftewel: van elke mogelijke combinatie krijg je één rij te zien. Wil je de laatste datum zien, dan pak je het veld [Peildatum] en gebruik je de functie MAX. Dan krijg je dus 1 record te zien (ongeacht hoeveel records die datum hebben) met 1 veld ([Peildatum]) en dus de laatste datum.

Zo lees ik je vraag overigens ook, maar ik kan me niet voorstellen dat je dat wilt zien. Meestal wil je de laatste datum zien voor een bepaalde klant o.i.d. In dat geval pak je uit de één-tabel de gewenste velden, die je de functie Group By geeft (standaard in een totalen query) en dus nog steeds het veld [Peildatum] met MAX.
Dan heb je een logischer resultaat. Maar is dat dan wel wat je bedoelt? Graag meer info!
En ja, zo’n query is volledig geautomatiseerd :)
 
Hallo Oktafish,

Wat jij in de tweede paragraaf noemt in iderdaad precies wat ik zoek. nu heb ik op jouw aanwijzingen de query aangepast, en toen kwam ik uit op dit: temp.png, maar het resultaat is dit: temp2.png, terwijl alleen de geel gearceerde de bedoeling was.

Ik doe dus nog iets flink verkeerd, want dit resultaat is exact hetzelfde als dat je de totaal-functie helemaal weg laat.

Ik hoor graag even wat ik moet doen om het gewenst resultaat te krijgen.

Alvast hartelijke dank.

P.S. en het klopt wat je vertelde over de bijdrage van DaFuzz, ik had iets te snel mijn conclusie getrokken.
 
De query levert precies wat je vraagt; zo te zien is de peildatum voor alle objecten hetzelfde geweest. Mij is nog niet duidelijk wat je nu precies wilt zien, maar ik zie in je ontwerp minstens één tabel die je in de query niet gebruikt. Elke tabel die je in een query zet maakt het resultaat minder uniek, en hetzelfde geldt voor het aantal velden. Wat je ziet zijn wel degelijk unieke records; kijk maar in het resultaat waar je geen dubbele waarden zult zien. Als je géén totalen (en dus ook geen Group By) gebruikt, en het resultaat is exact hetzelfde, dan betekent dat maar één ding: je hebt maar één peildatum in je tabel staan.
Als ik naar je 'gele' records kijk, dan zie ik dat je steeds de hoogste Opstal wilt zien. Dan zou ik daar óók een MAX op zetten. Dat lost nog niet(s) alles op, omdat er nog steeds gegroepeerd wordt op andere velden, en die combinaties moeten dus óók uniek zijn. Simpel te zien, als je kijkt naar de Albert Schweitzer. Daar wil je de hoogste zien (103.099). Zet je het veld [Opstal] op Max dan krijg je echter ook nog steeds het bedrag 75.764 te zien, en dat komt doordat in het veld [Omschrijving] verschillende waarden staan. En omdat de Totalenquery alleen kijkt naar unieke records is dat ook weer een unieke combinatie.

Wil je alleen de school, het hoogste bedrag en de hoogste peildatum zien (overigens een rare combinatie als je het mij vraagt; dat zou betekenen dat je per peildatum meerdere opstal bedragen invoert voor dezelfde locatie) dan moet je deze query maken:
PHP:
[Object] - Group By
[Opstal] - Max
[Peildatum] - Max

Wil je alleen per object de laatste peildatum zien, dan krijg je dit:
PHP:
[Object] - Group By
[Peildatum] - Max

En wil je per object de maximale opstal zien, dan krijg je dit:
PHP:
[Object] - Group By
[Opstal] - Max
 
Hallo Octafish,

Het is mij inmiddels een beetje duidelijker geworden. Als je "totalen" toevoegt maken alle velden die je aan de query toevoegt deel uit van "een statistische functie" (group by, max, som, min, etc..). Maar ik wil gewoon van bepaalde velden de waarde laten zien. Ik had gehoopt op de Totaal-functie "Expressie" maar die levert dan een foutmelding op omdat deze functie geen statistische functie is.
Als ik alleen de velden "Object" met functie "Group by" en "Peildatum" met functie "Max" in de query opneem krijg ik precies de records die ik bedoel te zien, alleen zonder de informatie die ik nodig heb, informatie die staan in velden als "Opstal", "Inventaris", etc..

Iets moet deze query dus duidelijk maken dat een statistische functie nodig is om de benodigde selectie te maken, maar dat het resultaat ook waarden van velden laat zien (van de resultante records uiteraard) waar geen statistische functie op wordt losgelaten: ze moeten gewoon hun waarde laten zien en verder niet.

Hoe krijg ik dit voor mekaar?

Alvast bedankt,
OBADE
 
Je beschrijving van het probleem is niet helemaal correct, aangezien niet alle functies statistisch zijn, en je Expressie best kan gebruiken (namelijk voor: berekeningen die een expressie bevatten). Het enige dat de Totalenquery doet, is van elke unieke combinatie een record tonen. Hoe meer velden (met afwijkende waarden), hoe meer records. Als je dus een uniek object hebt met een ObjectID waar je op groepeert, dan kun je best meerdere velden uit de Objectentabel toevoegen, die dan ook de functie Group By krijgen, en dan zal je resultaat (aantal records) niet veranderen. Dat gebeurt pas als je een veld toevoegt dat in combinatie met ObjectID niet meer uniek is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan