Sql 使用oracle查询获取每个员工的上次更新时间

Sql 使用oracle查询获取每个员工的上次更新时间,sql,oracle,Sql,Oracle,我已尝试以下查询以获取上次更新值。。但我不能为每个员工都指定一行 select distinct Employee_name,Employee_status,update_time from Employee where Employee_name= 'Muthukumar' and Employee_status='ACTIVE' order by Employee_name, Update_time desc Employee_name Employee_st

我已尝试以下查询以获取上次更新值。。但我不能为每个员工都指定一行

select distinct Employee_name,Employee_status,update_time
  from Employee 
 where Employee_name= 'Muthukumar'
   and Employee_status='ACTIVE' 
 order by Employee_name, Update_time desc

Employee_name       Employee_status  Update_time
Muthukumar          ACTIVE           06-DEC-12 10.18.59.048000000 AM
Muthukumar          ACTIVE           05-DEC-12 05.05.41.165000000 AM
Muthukumar          ACTIVE           04-SEP-12 03.00.54.706000000 AM
像这样,我将有不同员工的条目。我需要为每个员工获取一行,其中只有最后更新的时间。(最高)

输出应为:

Employee_name  Employee_status   Update_time
Muthukumar     ACTIVE            06-DEC-12 10.18.59.048000000 AM

Oracle支持
通用表表达式
窗口功能
。借助于使用
ROW\u NUMBER()
它根据特定顺序对组中的每条记录进行排序

WITH empList
AS
(
    SELECT  Employee_Name,
            Employee_Status,
            Update_Time,
            ROW_NUMBER() OVER(PARTITION BY Employee_Name
                                ORDER BY Update_Time DESC) rn
    FROM    EmployeeList
)
SELECT  Employee_Name,
        Employee_Status,
        Update_Time
FROM    empList
WHERE   rn = 1

这是一个经典的分析等级请求。您需要按员工对所有行进行分区并按日期排序,从而对所有行进行排序。然后只取第一名

一些阅读和阅读


不,它只使用公共表表达式。我有一个问题,用户的状态是否总是改变?不,它不会改变。。只是将来可能会改变,而不是现在:)但是我应该在哪里给出表名呢?
SELECT Employee_name, Employee_status, update_time  
FROM
(
    SELECT Employee_name, Employee_status, update_time,
           RANK() OVER (PARTITION BY Employee_name ORDER BY update_time DESC) as Rank
    FROM Employee
)
WHERE Rank = 1