laatste datum weergeven

Status
Niet open voor verdere reacties.

jojo96

Gebruiker
Lid geworden
4 mei 2010
Berichten
27
Ik heb een tabel gemaakt met een overzicht van patiënten controle. En een query waarin de bloeddruk >=160 wordt aan gegeven. Er staat ook een datum bij. Maar hoe kan ik er voor zorgen dat alleen de laatste datum wordt weergeven? Bij totaal laatste in te voeren lukt niet :confused:
 
Voer voor je datumkolom bij Totaal Max in in plaats van Laatste.

Tardis
 
Je info is een beetje te summier.
Hoe ziet je query eruit, en hoe je tabel waarover je queriet?

Enne... met kreten als "werkt niet" kunnen we niets.
Wat gebeurt er en wat wil jij zien gebeuren.

Tardis
 
Laatst bewerkt:
Zoals hierboven aangegeven is er een MAX functie in SQL wat de hoogste waarde ophaalt, in dit geval de "hoogste" datum.
Probeer eens iets als bijv:

select max(totaal) as 'Laatste datum'
 
Ik heb geprobeerd wat jullie hebben gezegd. Maar ik kom er niet uit. Hier is een voorbeeld bestandje. Het moet dan zo zijn als ik 2 dezelfde mensen heb (hier "ik") dan moet de query de laatste datum weergeven. Dat zou dan 20-9-2010 zijn bij het voorbeeld.

Hier is het voorbeeldje:http://easy-upload.nl/f/NKvS5YrB
 
Met de huidige velden in je query gaat dat niet lukken; hoe meer velden je neemt om te groeperen, hoe meer unieke combinaties er mogelijk zijn.
Code:
SELECT naam, Max(datum) AS [Max Datum]
FROM controle
WHERE (systole>=160)
GROUP BY naam
ORDER BY Max(datum) DESC;
Deze qeury doet het bijvoorbeeld prima. Zet je het veld [diastole] er bij, dan lijkt het in jouw voorbeeld wel te kloppen, maar dat is dan alleen omdat in je voorbeeld dit veld bij alle records de waarde 80 heeft. Verander je één record naar 70, dan krijg je alweer twee records terug.
Kortom: wil je van elke persoon maar één record zien, dan moet je in de query zo weinig mogelijk velden gebruiken die een afwijkende waarde kunnen bevatten. Naast het veld [Naam] kun je bijvoorbeeld wel de velden [Adres] en [Woonplaats] gebruiken, omdat die waarschijnlijk uit de tabel Personen komen, en aan de Naam zijn gekoppeld. Je houdt met die velden dus nog steeds één record. Met het veld [diastole] geldt dat niet, omdat dat veld verschillende waarden zou kunnen bevatten, en dan is het resultaat meer records per persoon.
 
Ik heb het geprobeerd wat je voor stelde, maar het werkt niet. Ik heb het beperkt tot 3 velden: naam, datum en diastole. Maar dit werkt helaas niet.
Dit is de SQL code die ik nu heb bij het officiële bestand:
Code:
SELECT [controle bewoners laag 1].naam, Max([controle bewoners laag 1].datum) AS MaxVandatum, [controle bewoners laag 1].diastole
FROM [controle bewoners laag 1]
GROUP BY [controle bewoners laag 1].naam, [controle bewoners laag 1].diastole
HAVING ((([controle bewoners laag 1].diastole)>=160));

Heeft iemand nog oplossingen?
 
Gaat dus niet met 3 velden......
Zie de eerdere reactie van OctaFish.

Tardis
 
Sluit ik mij uiteraard helemaal bij aan.... Nogmaals: als je per persoon één record wilt op basis van de laatste datum met het criterium, dan moet je geen andere velden meenemen die verschillende waarden kunnen bevatten. Wat je wel kunt laten zien, is van dat andere veld bijvoorbeeld de Laatste waarde, de Max waarde etc. Zolang je maar niet groepeert op het veld [diastole].
 
Zo gaat het wel.
Maak een nieuwe query.
Kies voor query-ontwerp.
Selecteer geen tabel, je query-ontwerp is nu nog leeg.
Kies via de menubalk voor SQL weergave.
Nu opent een scherm waarin je je query in SQL weergave ziet.
Haal alles weg wat daar staat.
Plak vervolgens deze SQL in het venster

Code:
SELECT controle.naam, controle.datum, controle.systole, controle.diastole
FROM controle
WHERE controle.systole>=160
AND controle.datum =
(
SELECT Max(temp.datum)
FROM controle AS temp
WHERE controle.naam = temp.naam
)
ORDER BY controle.datum DESC;

Sla de query op et voila.

Tardis
 
Leuk geprobeerd, maar dat werkt alleen als de laatste (max) datum een systole heeft die hoger is als 160. Is dat niet zo, en dat is makkelijk in een voorbeeldje uit te testen, dan blijft de recordset leeg.
Dit werkt wel: eerst een query maken die de naam en de datum selecteert (zoals eerder eigenlijk al aangegeven)
Code:
SELECT naam, Max(controle.datum) AS [Max Datum]
FROM controle
WHERE (systole>=160)
GROUP BY naam
ORDER BY Max(datum) DESC;
Vervolgens maak je een nieuwe query, waarbij je de tabel Controle gebruikt en de nieuwe query. De query gebruik je om de records uit Controle te filteren.

Code:
SELECT controle.naam, controle.datum, controle.systole, controle.diastole
FROM qSelectie INNER JOIN controle ON (qSelectie.[Max Datum] = controle.datum) AND (qSelectie.naam = controle.naam)
WHERE (controle.systole>=160)
ORDER BY controle.datum DESC;
Vermoedelijk kan het ook wel in één query; daar kijk ik nog wel even naar, als T mij niet voor is...
 
Ik heb het geprobeerd wat je zei, maar bij mij werkt dit helaas niet.
 
Wat heb je precies geprobeerd? Post eventueel de SQL code van je query.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan