0

我已经尝试了下面的查询来获取最后的更新值。但我无法为每个员工获取单行

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
4

2 回答 2

1

Oracle 支持common table expressionwindow function. 在使用ROW_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
于 2013-04-03T14:21:38.507 回答
0

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

一些阅读herehere

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
于 2013-04-03T14:21:57.507 回答