Ik ben momenteel bezig met het bouwen van een query om de meest recente items uit een tabel op te halen. Dat is goed gelukt:
Dit werkt als een trein, mits er niet twee opinies op dezelfde datum zijn ingevoerd. Dan worden (logisch) allebei de opinies getoond. Daarom had ik de volgende query bedacht:
Er wordt dus een extra subquery uitgevoerd (regel 7) die van de records met de hoogste datum het record met het hoogste id pakt (het meest recent ingevoerde record dus). Deze constructie werkt maar ziet er wel tamelijk omslachtig uit. Zijn er makkelijkere (en mogelijk snellere) manieren om dit te fixen?
SQL:
1
2
3
4
5
6
7
8
| SELECT t.strResearchThema AS Thema, "WAAR" AS Scan, b.strBedrijfnaam AS Name_ING, o.strOpinie AS SubtekstNL, n.strNFIText FROM tblNFIAlgemeen AS n RIGHT JOIN ((tblBedrijven AS b INNER JOIN tblOpinie AS o ON b.intBedrijfID = o.intBedrijfID) INNER JOIN tblResearchThema AS t ON o.intResearchThemaID = t.intResearchThemaID) ON n.intBedrijfID = b.intBedrijfID WHERE o.intResearchThemaID In (SELECT intThemaID FROM tblTempPortefScanThema) AND b.intBedrijfID In (SELECT intBedrijfID FROM tblTempPortefScan) AND o.strOordeel="SUB" AND o.datAdded=(SELECT max(oo.datAdded) FROM tblOpinie oo WHERE oo.intBedrijfID = o.intBedrijfID AND oo.intResearchThemaID = o.intResearchThemaID) AND iif(n.datDatum IS NULL, "1", n.datDatum)=iif(n.datDatum IS NULL, "1", (SELECT max(nn.datDatum) FROM tblNFIAlgemeen nn WHERE nn.intBedrijfID = n.intBedrijfID)) ORDER BY t.strResearchThema, b.strBedrijfnaam; |
Dit werkt als een trein, mits er niet twee opinies op dezelfde datum zijn ingevoerd. Dan worden (logisch) allebei de opinies getoond. Daarom had ik de volgende query bedacht:
SQL:
1
2
3
4
5
6
7
8
9
| SELECT t.strResearchThema AS Thema, "WAAR" AS Scan, b.strBedrijfnaam AS Name_ING, o.strOpinie AS SubtekstNL, n.strNFIText FROM tblNFIAlgemeen AS n RIGHT JOIN ((tblBedrijven AS b INNER JOIN tblOpinie AS o ON b.intBedrijfID = o.intBedrijfID) INNER JOIN tblResearchThema AS t ON o.intResearchThemaID = t.intResearchThemaID) ON n.intBedrijfID = b.intBedrijfID WHERE o.intResearchThemaID In (SELECT intThemaID FROM tblTempPortefScanThema) AND b.intBedrijfID In (SELECT intBedrijfID FROM tblTempPortefScan) AND o.strOordeel="SUB" AND o.datAdded=(SELECT max(oo.datAdded) FROM tblOpinie oo WHERE oo.intBedrijfID = o.intBedrijfID AND oo.intResearchThemaID = o.intResearchThemaID) AND o.intOpinieID=(SELECT max(ooo.intOpinieID) FROM tblOpinie ooo WHERE ooo.intBedrijfID = o.intBedrijfID AND ooo.intResearchThemaID = o.intResearchThemaID AND ooo.datAdded = o.datAdded) AND iif(n.datDatum IS NULL, "1", n.datDatum)=iif(n.datDatum IS NULL, "1", (SELECT max(nn.datDatum) FROM tblNFIAlgemeen nn WHERE nn.intBedrijfID = n.intBedrijfID)) ORDER BY t.strResearchThema, b.strBedrijfnaam; |
Er wordt dus een extra subquery uitgevoerd (regel 7) die van de records met de hoogste datum het record met het hoogste id pakt (het meest recent ingevoerde record dus). Deze constructie werkt maar ziet er wel tamelijk omslachtig uit. Zijn er makkelijkere (en mogelijk snellere) manieren om dit te fixen?
[ Voor 3% gewijzigd door Verwijderd op 04-07-2006 14:34 ]