Rejoindre deux tables mais seulement get l'logging associé le plus récent

J'ai du mal à build une requête sql qui récupère toutes datatables associées par rapport à une autre table ( associée ) et boucle dans cet set de données sur lesquelles sont considérées comme les plus récentes ( ou les plus récentes ).

L'image ci-dessous décrit mes deux tables ( Inventaire et Ventes ), la table d'inventaire contient tout l'article et la table Ventes contient tous les loggings de transaction. L'Inventory.Id est associé à Sales.Inventory_Id. Et le résultat recherché est la sortie sur laquelle j'essaie de travailler.

Mon objective est d'associer tous les loggings de ventes en ce qui concerne l'inventaire mais seulement d'get la transaction la plus récente pour chaque article.

entrez la description de l'image ici

Utiliser une jointure simple ( gauche, droite ou intérieure ) ne produit pas le résultat que je search car je ne sais pas comment append une autre catégorie dans laquelle vous pouvez filterr datatables les plus récentes à joindre. Est-ce faisable ou devrais-je changer mon schéma de table?

Merci.

Vous pouvez utiliser APPLIQUER

Select Item,Sales.Price From Inventory I Cross Apply(Select top 1 Price From Sales S Where I.id = S.Inventory_Id Order By Date Desc) as Sales 
 WITH Sales_Latest AS ( SELECT *, MAX(Date) OVER(PARTITION BY Inventory_Id) Latest_Date FROM Sales ) SELECT i.Item, s.Price FROM Inventory i INNER JOIN Sales_Latest s ON (i.Id = s.Inventory_Id) WHERE s.Date = s.Latest_Date 

Réfléchissez bien aux résultats auxquels vous vous attendez s'il y a deux prix dans les ventes pour la même date.

Je voudrais juste utiliser une sous-requête corrélée:

 select Item, Price from Inventory i inner join Sales s on i.id = s.Inventory_Id and s.Date = (select max(Date) from Sales where Inventory_Id = i.id) 
 select * from ( select i.name, row_number() over (partition by i.id order by s.date desc) as rownum, s.price, s.date from inventory i left join sales s on i.id = s.inventory_id ) tmp where rownum = 1 

Démo SQLFiddle