Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Máximo de subconsulta T-SQL (data) e junções


Aqui está outra maneira de fazer isso sem subconsultas. Esse método geralmente supera os outros, então vale a pena testar os dois métodos para ver qual oferece o melhor desempenho.
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

Isso dará vários resultados se você tiver dois preços com o mesmo PriceDate EXATO (a maioria das outras soluções fará o mesmo). Além disso, não há nada para explicar a data do último preço no futuro. Você pode querer considerar uma verificação para isso, independentemente de qual método você acabar usando.