Как вывести запросом менеджеров, у которых з/п не менялась за последние 2 года?

Ссылка скопирована
1 ответ

Добрый день, есть таблица managers c полями:
managerpositionid,
managerid,
datestart (дата приема на работу),
positionid (филиал банка),
salary (зарплата).
На дату приема на работу у менеджера одна зарплата, а в течение нескольких лет работы повышается.
Как вывести запросом менеджеров, у которых з/п не менялась за последние 2 года?

Дополнительно:

Приведите пример исходных данных (CREATE TABLE + INSERT INTO для 4 сотрудников - принят ранее 2 лет / в последние 2 года, зарплата менялась / не менялась) и требуемый результат запроса.

  • Akina,
    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 года?

  • Вот те же данные в виде fiddle.

    Теперь по делу.

    Во-первых, что имелось в виду под словами "за последние 2 года"? Обычно такое говорят, когда надо считать "от сегодня" - но у Вас там даты гораздо раньше, т.е. ни у кого за именно последние 2 года никаких изменений нет.

    Во-вторых, я вроде вменяемо просил 4 записи, и для каждой разная комбинация фактов. А у Вас две пары близнецов-братьев. Так не пойдёт.

    В общем, поправьте fiddle и вставьте туда нормальные данные. Добавьте ссылку плюс эталонный ответ для этих данных в текст вопроса

  • Akina, да нету у меня нормальных данных как задание понял так и пишу.
    В таблице данные так как и в задании, там не две пары близнецов, а типа менеджер устроился в 2018 с з/п 10к, а в 2019 ему подняли на 5к, т.е. 1 и 3 менеджеру за год подняли з/п. А теперь запросом нужно вытащить из таблицы менеджеров, у которых не менялась з/п в течение 2 лет, стало быть 2 и 4.
  • Kathoreary, это будет "у кого з/п не менялась в течение первых 2 лет момента приёма на работу". А в задании - в течение последних 2 лет.
  • Лентюй, ??
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Кирилл JS Ответ

    Для того чтобы вывести список менеджеров, у которых зарплата не менялась за последние 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
    )

    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" на соответствующие названия столбцов в вашей базе данных.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно