Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sous-requête T-SQL Max(Date) et jointures

Voici une autre façon de le faire sans sous-requêtes. Cette méthode sera souvent plus performante que les autres, il vaut donc la peine de tester les deux méthodes pour voir laquelle offre les meilleures performances.

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

Cela donnera plusieurs résultats si vous avez deux prix avec le même PriceDate EXACT (la plupart des autres solutions feront de même). De plus, il n'y a rien pour expliquer que la date du dernier prix soit dans le futur. Vous voudrez peut-être envisager une vérification pour cela, quelle que soit la méthode que vous utiliserez.