Je sais que c'est simple pour la plupart d'entre vous!
J'ai une table Factures comme ça:
+-----------+------------+------+-------+ | InvoiceID | Date | Item | Price | +-----------+------------+------+-------+ | 1 | 15/04/2014 | A | 12 | | 2 | 20/04/2014 | A | 20 | | 3 | 20/04/2014 | A | 27 | | 4 | 20/04/2014 | B | 29 | | 5 | 28/04/2014 | C | 16 | | 6 | 28/04/2014 | B | 11 | +-----------+------------+------+-------+
Je voudrais récupérer le prix par rapport au dernier identifiant de facture pour chaque article, donc:
+------+-----------+ | Item | LastPrice | +------+-----------+ | A | 27 | | B | 11 | | C | 16 | +------+-----------+
Quel est le moyen le plus efficace de le faire? J'utilise SQL Server 2008
Merci d'avance pour toute aide reçue.
with cte as ( select *, row_number() over (partition by Item order by date desc) as r from dbo.YourTable ) select * from cte where r = 1
Cela peut faire votre travail:
SELECT Item, Price AS 'LastPrice' FROM MyTable WHERE InvoiceId IN (SELECT Max(InvoiceId) FROM MyTable GROUP BY Item)