Приветствую Вас,

Помогите с запросом, а то уже с утра сижу не могу додумать:
Для примера есть 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, с Селектом
все было хорошо. Но возникла другая проблема в правке предыдущей и
следующих строк, думал сделать через тригеры, а оказалось что нельзя
отключать другие триггеры в триггерах и нежелательно править эту же
таблицу в инсертом/апдейтом в триггере.

Подскажите решение.

-- 
С Уважением, Дмитрий Котельников

Ответить