MySql Выбрать пользователей по их последней дате - PullRequest
0 голосов
/ 09 июля 2020

Постарайтесь получить зарплату от сотрудников к самой последней дате, но получайте несколько выходов. Пробовал с отчетливым и не получилось. Я уверен, что мне не хватает одного слова, чтобы решить эту проблему: D

SELECT DISTINCT first_name, last_name, salary, to_date
FROM employees e
LEFT JOIN salaries s
 ON e.emp_no = s.emp_no
 AND salary >= 70000   // Here I miss the line which will only take the latest date 

1 Ответ

2 голосов
/ 09 июля 2020

В MySQL версиях 8+, ROW_NUMBER - хороший способ удовлетворить это требование:

WITH cte AS (
    SELECT DISTINCT first_name, last_name, salary, to_date,
                    ROW_NUMBER() OVER (PARTITION BY first_name, last_name
                                       ORDER BY to_date DESC) rn
    FROM employees e
    LEFT JOIN salaries s ON e.emp_no = s.emp_no AND s.salary >= 70000
)

SELECT first_name, last_name, salary, to_date
FROM cte
WHERE rn = 1;

Обратите внимание, что в этом ответе предполагается, что комбинация имени и фамилии сотрудника всегда будет уникальный. В общем, было бы намного лучше использовать здесь какой-либо уникальный идентификатор сотрудника.

Этот ответ может быть неполным без версии, которая также работала бы на MySQL 5.7 или более ранней версии:

SELECT e.first_name, e.last_name, s1.salary, s1.to_date
FROM employees e
LEFT JOIN salaries s1 ON e.emp_no = s1.emp_no AND s1.salary >= 70000
INNER JOIN
(
    SELECT emp_no, MAX(to_date) AS max_to_date
    FROM salaries
    GROUP BY emp_no
) s2
    ON s1.emp_no = s2.emp_no AND s1.to_date = s2.max_to_date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...