如何处理 SQL 中的关系

How to handle ties in SQL

SELECT
    employee_id,
    department_id,
    first_name,
    last_name,
    hire_date,
    job_id
FROM employees e
WHERE hire_date IN 
     (
         SELECT max(hire_date)
         FROM employees
         WHERE e.department_id = department_id 
     )
ORDER BY hire_date ASC

Result of the query

这是我的查询及其结果。 SA_REP 部门有两个并列的结果,我应该只有一个结果 - 例如 employee_id 较低的那个。我用谷歌搜索了这个问题,但似乎找不到任何相关结果...

感谢您的帮助!

您可以使用 not exists 查询,这会给您带来更大的灵活性:

SELECT *
FROM employees e
WHERE NOT EXISTS (                                                  -- no x exists that...
    SELECT *
    FROM employees x
    WHERE x.department_id = e.department_id                         -- belongs to same department 
    AND (
        x.hire_date > e.hire_date OR                                -- but hired later than e
        x.hire_date = e.hire_date AND x.employee_id < e.employee_id -- hired on same date but has lesser employee id than e
    )
)

您可以在这里使用RANK解析函数:

WITH cte AS (
    SELECT e.*, RANK() OVER (PARTITION BY department_id
                             ORDER BY hire_date DESC, employee_id) rnk
    FROM employees e
)

SELECT employee_id, department_id, first_name, last_name, hire_date, job_id
FROM cte
WHERE rnk = 1;