SQL Query从Emp Audit表中获取emp和相应的管理器

时间:2013-10-31 16:05:45

标签: sql sql-server

我有员工审计表,每个员工都有多行。 EX:EMP_TABLE

Emp_id Manager_id Date
1         1       Sep'13
1         2       Sep'13  
1         3       Oct'13
2         1       Jan'13
2         1       Feb'13
3         1       Jan'13
3         1       Mar'13
3         2       Feb'13
3         2       Jan'13

输出我正在寻找表

  

最新员工更改行

根据上表,需要输出

  Emp_id  Manager_id   Date
    1         3       Oct'13  
    2         1       Feb'13
    3         1       Mar'13

我尝试了以下查询

select emp_id,Manager_id,MAX(Date)
from Emp_Table
Group by emplid

2 个答案:

答案 0 :(得分:2)

您可以使用ROW_NUMBER()这是一个生成序号的分析函数。在这种情况下,按emp_id按降序排序的每date生成序号。最新更改的1 rn值可以过滤掉。{/ p>

SELECT Emp_ID, manager_ID, Date
FROM
(
    SELECT  Emp_ID, manager_ID, Date,
            ROW_NUMBER() OVER (PARTITION BY Emp_ID ORDER BY DATE DESC) rn
    FROM    tableName
) a
WHERE   rn = 1

答案 1 :(得分:0)

SELECT emp_id,
       Manager_id,
       Date
FROM Emp_Table
WHERE (emp_id, Date) in 
                       (select emp_id, 
                               MAX(Date)
                          from Emp_Table
                      group by emp_id)