Het probleem is als volgt:
Uit de tabel ‘tblSubProgramBid’ dienen voor elke subprogram (SubProgramId) de bids per bedrijf (SubProgramCompanyBidId) geselecteerd te worden welke de meeste recente validate date (SubProgramValidateDate) moet hebben. Wanneer er meerdere bids met gelijke validate date van eenzelfde bedrijf op één bepaald subprogram zijn, dient alleen de bid geselecteerd te worden met de laatste timestamp (SubProgramBidTimeStamp). Elke bid in deze tabel wordt uniek geidentificeerd aan de hand van een SubProgramBidId.
Wat dummy data:

Om dit alles voor elkaar te krijgen heb ik na dagen van gekloot, de volgende query geschreven:
Dit leidt tot het volgende resultaat:

De huidige testtabel bestaat uit slechts 170 rows. In de toekomst is het de bedoeling dat hier duizenden records in komen te staan. Echter doet de query er nu al 15 seconden over!
Mijn vraag is: Kan deze query geoptimaliseerd worden? Andere constructies bv.?
Uit de tabel ‘tblSubProgramBid’ dienen voor elke subprogram (SubProgramId) de bids per bedrijf (SubProgramCompanyBidId) geselecteerd te worden welke de meeste recente validate date (SubProgramValidateDate) moet hebben. Wanneer er meerdere bids met gelijke validate date van eenzelfde bedrijf op één bepaald subprogram zijn, dient alleen de bid geselecteerd te worden met de laatste timestamp (SubProgramBidTimeStamp). Elke bid in deze tabel wordt uniek geidentificeerd aan de hand van een SubProgramBidId.
Wat dummy data:

Om dit alles voor elkaar te krijgen heb ik na dagen van gekloot, de volgende query geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SELECT *
FROM tblSubProgramBid subprogbid0
WHERE subprogbid0.SubProgramBidTimeStamp =
(SELECT MAX(subprogbid1 .SubProgramBidTimeStamp)
FROM tblSubProgramBid subprogbid1
WHERE subprogbid1.SubProgramValidateDate =
(SELECT MAX(subprogbid2 .SubProgramValidateDate)
FROM tblSubProgramBid subprogbid2
WHERE subprogbid1.SubProgramId = subprogbid2.SubProgramId AND
subprogbid1.SubProgramCompanyBidId = subprogbid2.SubProgramCompanyBidId)
AND subprogbid0.SubProgramId = subprogbid1.SubProgramId AND
subprogbid0.SubProgramCompanyBidId = subprogbid1.SubProgramCompanyBidId)
ORDER BY SubProgramId |
Dit leidt tot het volgende resultaat:

De huidige testtabel bestaat uit slechts 170 rows. In de toekomst is het de bedoeling dat hier duizenden records in komen te staan. Echter doet de query er nu al 15 seconden over!
Mijn vraag is: Kan deze query geoptimaliseerd worden? Andere constructies bv.?