我已经在下面设置了它,但我试图将其更改为使用rank(),并且遇到了各种语法错误。我希望有人能帮助我。
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
CREATE TABLE EMPLOYEES
(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, DOB) AS
SELECT 1, 'John', 'Doe', DATE '2002-06-01'
FROM DUAL UNION ALL
SELECT 2, 'Jane', 'Doe', DATE '2002-08-09'
FROM DUAL UNION ALL
SELECT 3, 'Mike', 'Jones', DATE '2000-08-09'
FROM DUAL;
SELECT * FROM EMPLOYEES WHERE DOB IN (SELECT MIN(DOB) FROM EMPLOYEES UNION ALL SELECT MAX(DOB) FROM EMPLOYEES)
您可以使用
rank()
两次,按 DOB 升序和降序排序:然后将其用作子查询(CTE 或内联视图)并过滤结果:
小提琴
如果多个人具有相同的最早或最新出生日期,那么这两者都会显示,就像您的原始查询一样。
您的查询更改为使用 Windows 函数将如下所示:
与以下相同
RANK
: