我是Oracle DB的新手。我有一个Oracle表(EMPLOYEE),如下所示。我想根据员工的最大有效日期获取记录:
| 员工姓名|生效日期| Eff Date |
| --|--| ------------ |
| 杜克|2022年1月1日| 01-JAN-2022 |
| 杜克|2023年2月1日|01-FEB-2023|
| 杜克|2022年12月1日| 01-DEC-2022 |
| 迈克|2022年1月1日| 01-JAN-2022 |
| 迈克|2022年12月1日**|01-DEC-2022|
| 杰克|2023年1月1日| 01-JAN-2023 |
| 杰克|2023年3月1日|01-MAR-2023|
我期望输出如下:
| 员工姓名|生效日期| Eff Date |
| --|--| ------------ |
| 杜克|2023年2月1日| 01-FEB-2023 |
| 迈克|2022年12月1日| 01-DEC-2022 |
| 杰克|2023年3月1日| 01-MAR-2023 |
有人可以指导如何编写一个SQL查询,以根据最大有效日期为每个EmpId获取一条记录吗
1条答案
按热度按时间jmp7cifd1#
一种选择是使用一个分析函数(例如
rank
,在多行具有相同日期的情况下,它可能比row_number
更好,而其他列值不同-在这种情况下可能不是这种情况),按员工按日期降序排序,然后提取排名最高的行。样本数据:
字符串
查询:
型
我们在引入分析函数之前使用的选项在子查询中查找最大日期,但该选项现在比前一个更糟糕,因为它扫描同一个表(
employees
)两次。型