Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL-Unterabfrage Max(Datum) und Joins

Hier ist eine andere Möglichkeit, dies ohne Unterabfragen zu tun. Diese Methode ist anderen häufig überlegen, daher lohnt es sich, beide Methoden zu testen, um zu sehen, welche die beste Leistung liefert.

SELECT
     PRT.PartID,
     PRT.PartNumber,
     PRT.Description,
     PRC1.Price,
     PRC1.PriceDate
FROM
     MyParts PRT
LEFT OUTER JOIN MyPrices PRC1 ON
     PRC1.PartID = PRT.PartID
LEFT OUTER JOIN MyPrices PRC2 ON
     PRC2.PartID = PRC1.PartID AND
     PRC2.PriceDate > PRC1.PriceDate
WHERE
     PRC2.PartID IS NULL

Dies führt zu mehreren Ergebnissen, wenn Sie zwei Preise mit demselben GENAUEN Preisdatum haben (die meisten anderen Lösungen tun dasselbe). Außerdem gibt es keinen Anhaltspunkt dafür, dass das letzte Preisdatum in der Zukunft liegt. Sie sollten eine Überprüfung in Betracht ziehen, unabhängig davon, welche Methode Sie am Ende verwenden.