Приветствую Вас,
Помогите с запросом, а то уже с утра сижу не могу додумать:
Для примера есть 2 таблички:
CREATE TABLE DIR_EMPLOYEES (
ID INTEGER NOT NULL,
NAME VARCHAR(50),
PAR1 VARCHAR(50),
PAR2 VARCHAR(50),
PAR3 VARCHAR(50),
);
CREATE TABLE DIR_EMPLOYEES_HIS (
ID INTEGER NOT NULL,
PID INTEGER,
DATE_FROM TIMESTAMP,
PAR4 VARCHAR(50),
PAR5 VARCHAR(50),
PAR6 VARCHAR(50)
);
Первая табличка это данные о сотруднике, а вторая это история данных
переменных реквизитов. Надо вывести всех сотрудников и первую
попавшуюся из истории реквизитов.
SELECT
e.id,
e.name,
e.par1,
eh.date_from,
eh.par5,
FROM
dir_employees e
LEFT JOIN dir_employees_his eh
ON (
e.id = eh.pid AND
eh.date_from < CURRENT_TIMESTAMP
)
Решения:
1. Идеально было бы применить FIRST 1 но как его применить только для
DIR_EMPLOYEES_HIS.
2. Используя GROUP BY думаю будет накладно по времени выполнения и по
самому запросу т.к. надо будет перечислить все поля и в GROUP BY.
3. Пробовал в табличку DIR_EMPLOYEES_HIS добавить DATE_TO, с Селектом
все было хорошо. Но возникла другая проблема в правке предыдущей и
следующих строк, думал сделать через тригеры, а оказалось что нельзя
отключать другие триггеры в триггерах и нежелательно править эту же
таблицу в инсертом/апдейтом в триггере.
Подскажите решение.
--
С Уважением, Дмитрий Котельников