Альтернатива GROUP BY MySql - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь получить тот же результат, что и этот запрос, без использования group by.

SELECT emp_no,salary, max(to_date) to_date FROM employees.salaries

group by emp_no;

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Вы можете фильтровать с помощью коррелированного подзапроса:

select s.*
from employees.salaries s
where s.to_date = (
    select max(s1.to_date) 
    from employees.salaries s1 
    where s1.emp_no = s.emp_no and s1.salary = s.salary
);

Или, в MySQL 8.0, вы можете использовать row_number():

select *
from (
    select s.*, row_number() over(partition by emp_no, salary order by to_date desc) rn
    from employees.salaries s
) t
where rn = 1;
0 голосов
/ 27 марта 2020
SELECT emp_no, salary, to_date 
FROM employees.salaries t1
WHERE NOT EXISTS ( SELECT NULL
                   FROM employees.salaries t2
                   WHERE t1.emp_no = t2.emp_no
                     AND t1.salary = t2.salary
                     AND t1.to_date < t2.to_date )

или

SELECT t1.emp_no, t1.salary, t1.to_date 
FROM employees.salaries t1
LEFT JOIN employees.salaries t2 ON t1.emp_no = t2.emp_no
                               AND t1.salary = t2.salary
                               AND t1.to_date < t2.to_date
WHERE t2.to_date IS NULL

Если существуют записи, которые являются полными дубликатами по выражению (emp_no, salary, to_date), используйте SELECT DISTINCT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...