Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

T-SQL Subquery Max(Date) e join

Ecco un altro modo per farlo senza sottoquery. Questo metodo spesso supera gli altri, quindi vale la pena testare entrambi i metodi per vedere quale offre le prestazioni migliori.

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

Questo darà più risultati se hai due prezzi con lo stesso PREZZO ESATTO (la maggior parte delle altre soluzioni farà lo stesso). Inoltre, non c'è nulla di cui tenere conto del fatto che la data dell'ultimo prezzo sia nel futuro. Potresti prendere in considerazione un assegno indipendentemente dal metodo che finirai per utilizzare.