Как вывести запросом менеджеров, у которых з/п не менялась за последние 2 года?
Добрый день, есть таблица managers c полями:
managerpositionid,
managerid,
datestart (дата приема на работу),
positionid (филиал банка),
salary (зарплата).
На дату приема на работу у менеджера одна зарплата, а в течение нескольких лет работы повышается.
Как вывести запросом менеджеров, у которых з/п не менялась за последние 2 года?
Дополнительно:
Приведите пример исходных данных (CREATE TABLE + INSERT INTO для 4 сотрудников - принят ранее 2 лет / в последние 2 года, зарплата менялась / не менялась) и требуемый результат запроса.
create table managerpositions
(
managerpositionid NUMBER not null,
managerid NUMBER,
datestart DATE,
positionid NUMBER,
salary NUMBER
);
insert into managerpositions(managerpositionid,
managerid,
datestart,
positionid,
salary
)
values(1,
1,
to_date('01.01.2018', 'dd.mm.yyyy'),
1,
10000);
insert into managerpositions(managerpositionid,
managerid,
datestart,
positionid,
salary
)
values(2,
2,
to_date('01.01.2018', 'dd.mm.yyyy'),
1,
10000);
insert into managerpositions(managerpositionid,
managerid,
datestart,
positionid,
salary
)
values(3,
3,
to_date('01.01.2018', 'dd.mm.yyyy'),
1,
10000);
insert into managerpositions(managerpositionid,
managerid,
datestart,
positionid,
salary
)
values(4,
4,
to_date('01.01.2018', 'dd.mm.yyyy'),
1,
10000);
insert into managerpositions(managerpositionid,
managerid,
datestart,
positionid,
salary
)
values(5,
1,
to_date('01.01.2019', 'dd.mm.yyyy'),
1,
15000);
insert into managerpositions(managerpositionid,
managerid,
datestart,
positionid,
salary
)
values(6,
3,
to_date('01.01.2019', 'dd.mm.yyyy'),
1,
15000);
Получается такая таблица:
Результат запроса должен вернуть так:
Теперь по делу.
Во-первых, что имелось в виду под словами "за последние 2 года"? Обычно такое говорят, когда надо считать "от сегодня" - но у Вас там даты гораздо раньше, т.е. ни у кого за именно последние 2 года никаких изменений нет.
Во-вторых, я вроде вменяемо просил 4 записи, и для каждой разная комбинация фактов. А у Вас две пары близнецов-братьев. Так не пойдёт.
В общем, поправьте fiddle и вставьте туда нормальные данные. Добавьте ссылку плюс эталонный ответ для этих данных в текст вопроса
В таблице данные так как и в задании, там не две пары близнецов, а типа менеджер устроился в 2018 с з/п 10к, а в 2019 ему подняли на 5к, т.е. 1 и 3 менеджеру за год подняли з/п. А теперь запросом нужно вытащить из таблицы менеджеров, у которых не менялась з/п в течение 2 лет, стало быть 2 и 4.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для того чтобы вывести список менеджеров, у которых зарплата не менялась за последние 2 года, можно воспользоваться следующим SQL запросом:
SELECT * FROM managers WHERE hire_date < DATE_SUB(NOW(), INTERVAL 2 YEAR) AND salary = ( SELECT salary FROM managers WHERE manager_id = managers.manager_id ORDER BY hire_date DESC LIMIT 1 )
В данном запросе мы выбираем всех менеджеров, у которых дата найма была более 2 лет назад, и зарплата равна последней известной зарплате для данного менеджера. Таким образом, мы получим список менеджеров, у которых зарплата не менялась за последние 2 года.
Не забудьте заменить "managers" на имя вашей таблицы с менеджерами, и "manager_id", "hire_date" и "salary" на соответствующие названия столбцов в вашей базе данных.