Le but de cette requête est de ramener les produits et leurs prix pour les produits en vente et le prix devrait être à la date la plus proche mais pas la date passée, essentiellement le prix le plus récent disponible. Il n'y a pas de relevés de prix pour chaque jour. Quelque chose ne va pas dans le fait d'avoir l'instruction select globale dans la clause where. Y a-t-il une meilleure manière de faire cela? Peut-être dans les critères de jointure?Amélioration de SQL Requête avec la fonction max() dans la clause where
select
p.ProductName,
pp.Price,
pp.Date,
from product p
inner join productprice pp on p.productid = pp.productid
where
pp.evaluationdate = (select max(Date) from productprice
where productid = p.productid
and date < @DateIn)
and p.producttype = 'OnSale'
La requête en cours est un peu plus compliquée mais c'est essentiellement le problème. Merci pour votre contribution.
EDIT Il y aura plus d'un produit retourné
EDIT J'expérimente à la fois de @Remus Rusanu et @ suggestions de km (bien que @Remus Rusanu a enlevé son) tous les trois, y compris mon d'origine, semblent être à peu près les mêmes en termes de performance. J'essaie de décider si l'un offre un avantage sur les autres d'une autre manière intangible, c'est-à-dire la maintenance, l'auto-documentation, etc., car cela sera maintenu par quelqu'un d'autre. Merci encore.
Je pense que cela fonctionnerait probablement, bien que je limiterais le CTE pour filtrer les produits pour les critères de "onsale", mais cela semble être essentiellement la même chose. La performance serait-elle différente avec le CTE sur la sous-requête? ProductPrice est une grande table – Gratzy
Ma réponse était fondamentalement identique à la vôtre, donc j'ai enlevé la mienne. –