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