Присоединение к таблицам на основе самой последней даты - PullRequest
0 голосов
/ 30 ноября 2018

Допустим, у меня есть три таблицы:

  • employees, с столбцами id и name
  • salaries, с столбцами employee_id, salary, date
  • underlings, с колонками employee_id, number_of_underlings, date

Я хочу объединить таблицы так, чтобы для каждого salaries запись - это строка со значением salary, name, связанным с employee_id этой строки, и значением number_of_underlings, чья строка date совсем недавно предшествует date иззапись salaries (т. е. количество подчиненных, которых имел бы данный сотрудник на момент получения заработной платы).

Например, предположим, что в описанных таблицах появляются следующие строки:

id | name      employee_id | salary  |    date         employee_id | number_of_underlings |    date
---+-------   -------------+---------+------------    -------------+----------------------+------------
13 | Sally              13 |   90000 | 2017-11-29               13 |                    0 | 2017-05-13
                        13 |   95000 | 2018-01-01               13 |                    6 | 2018-02-20
                        13 |  120000 | 2018-03-01

Тогда полученное объединение будет иметь строки:

 name  | salary  | number_of_underlings |    date
-------+---------+----------------------+------------
 Sally |   90000 |                    0 | 2017-11-29
 Sally |   95000 |                    0 | 2018-01-01
 Sally |  120000 |                    6 | 2018-03-01

Конечно, объединение таблиц employees и salaries тривиально, но как насчет таблицы underlings?

1 Ответ

0 голосов
/ 30 ноября 2018

Один подход использует коррелированный подзапрос:

SELECT
    e.name,
    s.salary,
    (SELECT u.number_of_underlings FROM underlings u
     WHERE e.id = u.employee_id AND s.date >= u.date
     ORDER BY u.date DESC LIMIT 1) number_of_underlings,
    s.date
FROM employees e
INNER JOIN salaries s
    ON e.id = s.employee_id

Демо

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