Как проверить, было ли значение данных увеличено после нескольких изменений?

241
12 декабря 2017, 17:18

Есть таблица:

SalaryChanges (number int (11) not null, 
               salary float(11) not null, 
               dTime timestamp not null, 
               id int (11) not null)

Где:

  • number - номер записи (pk)
  • salary - новое значение зарплаты
  • dTime - дата изменения зарплаты
  • id - идентификатор работника (fk)

Вопрос: Как получить ID тех работников, зарплата которых увеличилась с 2016 по 2017 год? (зарплата может меняться несколько раз и может меняться в отрицательную сторону)

Тут можно толковать задачу: 2мя способами:

  1. Увеличение между первым и последним изменением зарплаты работника
  2. Увеличение между любыми двумя изменениями зарплаты работника

Интересуют оба варианта решения, но №2. предпочтительнее.

Answer 1

Задание недоопределено. Если его понимать, например, так: найти тех, у кого есть данные за оба года, и максимальная зарплата в 2017 году была выше, чем максимальная зарплата в 2016 году, то запрос может быть таким:

SELECT t1.id
FROM ( SELECT id, MAX(salary) salary2017
       FROM SalaryChanges 
       WHERE YEAR(dTime) = 2017
       GROUP BY id
     ) t1,
     ( SELECT id, MAX(salary) salary2016
       FROM SalaryChanges 
       WHERE YEAR(dTime) = 2016
       GROUP BY id
     ) t2
WHERE t1.id = t2.id
  AND t1.salary2017 > t2.salary2016
READ ALSO
Добавить в JOIN значение по умолчанию

Добавить в JOIN значение по умолчанию

Всем доброе время суток, есть несколько таблиц

230
Как удалить из огромной таблицы поля MySQL?

Как удалить из огромной таблицы поля MySQL?

Подскажите пожалуйста как удалить из таблицы на 1,5 миллиона строк, строки где встречается в поле "category" = 'Рубрики'В поиске phpMyAdmin выдаёт 15 строк,...

231
c# клиент для asterisk [дубликат]

c# клиент для asterisk [дубликат]

Данный вопрос уже был задан и имеет решение:

255