Det ser da umiddelbart ikke så forkert ud, bortset fra, at der ikke er grund til at bruge IN, da MAX funktionen uden uden GROUP BY altid kun vil returnere én row. Et lighedstegn ville være mere logisk.
Hvad er fejlen?
Muligvis er du også nødt til at gentage din INNER JOIN incl. WHERE i din subselect hvor du finder den sidste dato. Det kommer lidt an på, hvad du vil opnå. Hvis du vil vise den sidste dato, hvor navnekriteriet er opfyldt, er du i hvert fald nødt til at medtage det samme kriterie i subselecten. Så måske sådan?
"SELECT tab1.id, tab1.navn, tab2.idtab1, tab2.dato " + "FROM tab1 " + "INNER JOIN tab2 ON tab1.id = tab2.idtab1 " + "WHERE tab1.navn LIKE '%" + navn + "%' AND tab2.dato = (SELECT MAX(tab2.dato) FROM tab1 t1 INNER JOIN tab2 t2 ON t1.id = t2.idtab1 WHERE t1.navn LIKE '%" + navn + "%)";
En anden mulighed var, hvis det du ønsker er den sidste dato for alle de rows der opfylder dit navnekriterie. Det vil så nok blive noget lignende dette:
"SELECT tab1.id, tab1.navn, tab2.idtab1, tab2.dato " + "FROM tab1 " + "INNER JOIN tab2 ON tab1.id = tab2.idtab1 " + "WHERE tab1.navn LIKE '%" + navn + "%' AND tab2.dato = (SELECT MAX(t2.dato) FROM tab2 t2 WHERE t2.idtab1 = tab1.id)";
Det kommer helt an på, hvad du egentlig ønsker:
* Den seneste dato registreret i tabellen. * Den seneste dato, hvor navnekriteriet er opfyldt * Den seneste dato, hvor hver enkelt af de på grundlag af navnekriteriet udvalgte rows blev registreret
Jeg skal lige have den én gang mere for prins Knud. Er der mere end én row i tab2 for hver row i tab1, og du får alle kombinationerne (ikke bare den med den højeste dato)?
Du burde efter min bedste overbevisning kun få den seneste dato fra tab2 for hver række i tab1, som tilfredsstiller dit navnekriterie (det er jo den version du har valgt). Gider du tjekke det én gang mere?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.