2014-05-06 98 views
1

EmployeeData表如下所示如何在sql server中查找最新的記錄?

Employee Jobnum city state Datetime  Action 
--------------------------------------------------------------------------  
Tom   123  mon La  2014-04-14  U 
Tom   123  mon La  2014-04-14  D 
Tom   123  mon La  2014-04-13  D 
Tom   124  tue ca  2014-04-14  U 
Tom   124  tue ca  2014-04-14  I 
Jerry  143  hr  NY  2014-04-14  D 
Jerry  143  hr  NY  2014-04-14  I 
Jerry  143  hr  NY  2014-04-14  I 

當我查詢該表,我需要獲得最後一個記錄爲每個員工。

輸出應該看起來像

Employee Jobnum city state Datetime Action 
--------------------------------------------------------------------------- 
Tom   123  mon La  2014-04-14  D 
Tom   124  tue ca  2014-04-14  I 
Jerry  143  hr  NY  2014-04-14  I 
+0

什麼不同列?從你的例子看來它是Employee和Jobnum。還有其他人是否也喜歡城市和/或州(這個例子中不清楚)? – hatchet

回答

4
SELECT Employee,Jobnum,city ,[state], [Datetime], [Action] 
FROM (
select Employee,Jobnum,city ,[state], [Datetime], [Action] 
     ,ROW_NUMBER() OVER (PARTITION BY Employee,Jobnum ORDER BY [Datetime] DESC) AS rn 
from EmployeeData 
) Sub 
WHERE rn = 1 

避免使用SQL Server關鍵詞爲您的列名,如果你有這是在SQL關鍵字的任何列名服務器在它們周圍使用方括號[]

1

試試這個曾經在這裏

select ed.* 
from Employeedata ed 
inner join 
(
select jobnum,max(datetime) as maxdate 
from Employeedata 
group by jobnum 
) X 
on ed.DATETIME = X.maxdate 
and ed.jobnum = X.jobnum 
order by ed.jobnum; 

演示小提琴http://sqlfiddle.com/#!3/aa528/12

相關問題