oracle 查询记录表 获取每个人的最后一条操作记录 根据部门,因为有可能某个员工在中途更换部门
时间: 2024-09-24 09:26:59 浏览: 60
在Oracle查询中,获取每个人最后一条操作记录并考虑他们可能的部门变动,可以使用子查询、连接(JOIN)以及ROW_NUMBER()窗口函数。假设我们有两个表,一个是`employees`存储基本信息(id, name, department_id),另一个是`operations`存储操作记录(operation_id, employee_id, operation_date)。
首先,我们需要确定每个员工在当前部门的最新操作日期。可以这样做:
```sql
WITH latest_operations AS (
SELECT e.id, e.name, e.department_id,
op.operation_date as last_operation_date
FROM employees e
LEFT JOIN operations op ON e.id = op.employee_id
WHERE (e.department_id IS NULL OR op.operation_date = (
SELECT MAX(operation_date)
FROM operations
WHERE employee_id = e.id AND operation_date >= e.start_date -- 假设start_date字段表示员工加入部门的日期
))
ORDER BY e.department_id, op.operation_date DESC
ROW_NUMBER() OVER(PARTITION BY e.id ORDER BY op.operation_date DESC) as rn
)
SELECT * FROM latest_operations
WHERE rn = 1;
```
这里的关键点在于`latest_operations`子查询中,通过`ROW_NUMBER()`函数按员工ID分组,并保证每个员工的最近操作记录是他们的最高行号(rn = 1)。如果员工从未改变过部门,则会选择他的第一条记录(因为最早日期通常对应行号1)。
阅读全文