Я использую Firebird. Я хочу найти общее время работы между двумя датами для данного контакта.Суммарная временная разница между интервалами времени
Есть две таблицы: работать и платить
IDWORK | IDCONTACTS | STARTWORK | ENDWORK
----------------------------------------------------------
1 | 14 | 04/20/2014 09:02 | 04/20/2014 18:10
2 | 14 | 04/21/2014 08:41 |
3 | 14 | 04/20/2014 08:56 | 04/20/2014 17:01
4 | 10 | 04/18/2014 09:28 | 04/18/2014 16:22
IDPAY | IDCONTACTS | DATE1 | DATE2 | WORKTIME
--------------------------------------------------------------------
1 | 14 | 04/10/2014 09:02 | 04/27/2014 09:02 |
Я хочу, чтобы найти общее рабочее время между DATE1 и DATE2. Я попытался сделать триггер на PAY перед вставкой и обновлением:
begin
UPDATE PAY
SET WORKTIME = (SELECT SUM(DATEDIFF(MINUTE FROM STARTWORK TO ENDWORK))
FROM WORK, PAY
WHERE WORK.IDCONTACTS = PAY.IDCONTACTS
AND (STARTWORK BETWEEN DATE1 AND DATE2)
GROUP BY WORK.IDCONTACTS)
WHERE NEW.IDPAY = OLD.IDPAY;
end
но он не работает. Я также должен проверить, имеет ли значение ENDWORK значение NULL и вызывает ошибку.
Не храните рассчитанные поля. Триггер может резко повлиять на производительность. – Kermit