sql server: wie man die neuesten Verkaufsdaten nach Mitarbeiter zurückgibt

SQL noob hier Ich bin irgendwie schlagen

So habe ich eine list von data von Vertriebsmitarbeitern so

Employee Name| Sales Timestamp | Item Sold --------------------- Jackie Chan | 07/11/2014 | TV Jessica Alba | 08/01/2014 | Sofa Jessica Alba | 07/25/2014 | Stereo System Will Ferrell | 06/30/2014 | Sofa Will Ferrell | 07/15/2014 | TV 

Ich möchte Mitarbeiter zurückkehren, das letzte date, an dem sie etwas verkauft haben, und der Artikel verkauft.

Ich habe versucht

  Select [Employee Name], MAX[Sales Timestamp], [ITEM SOLD] FROM Sales GROUP BY [Employee Name], [ITEM SOLD] 

aber das gibt mir jeden Mitarbeiter die neuesten Verkäufe von irgendwelchen Gegenständen, während ich nur das letzte Element, das sie verkauft haben.

Bitte helfen!

 ;WITH SalesCTE AS ( SELECT [Employee Name], [Sales Timestamp], [ITEM SOLD], ROW_NUMBER() OVER (PARTITION BY [Employee Name] ORDER BY [Sales Timestamp] DESC) AS rn FROM Sales ) SELECT [Employee Name], [Sales Timestamp], [ITEM SOLD] FROM SalesCTE WHERE rn = 1 

SQL-Geige :

 SELECT s.[Employee Name], s.[Sales Timestamp], s.[ITEM SOLD] FROM ( Select [Employee Name] AS emp, MAX([Sales Timestamp]) AS ts FROM Sales GROUP BY [Employee Name] ) AS ss INNER JOIN Sales s ON ss.emp = s.[Employee Name] AND ss.ts = s.[Sales Timestamp] 

Ich mag die analytischen functionen für diese:

 WITH RankByDate AS ( SELECT EmployeeName, SalesTimestamp, ItemSold, ROW_NUMBER() OVER ( PARTITION BY EmployeeName ORDER BY Salestimestamp DESC ) AS TRank FROM Sales ) SELECT * FROM RankByDate 

Wenn der Verkäufer mehr als ein Einzelteil am spätesting date verkaufte, unterscheidet sich diese Abfrage von den anderen, daß es nur eines der Einzelteile zeigt. Es ist unklar aus den Beispieldaten, was in diesem Szenario passieren sollte. Wenn Sie alle zum letzten date verkauften Artikel ROW_NUMBER() möchten, replace Sie ROW_NUMBER() durch RANK() oder DENSE_RANK() .