У меня есть таблица частоты таблицы БД следующим образом (companyid, task и частоты), уникальный ключ
| companyid| task |frequency | date |
| -------- | ----- | ------- | ----- |
| 123 | abc | Day | 03-03-2020 |
| 123 | def | Week | 09-03-2020 |
| 456 | abc | Week | 10-03-2020 |
| 456 | klm | Week | 12-03-2020 |
Таблица истории следующим образом PRIMARY KEY ("companyid", "RECORDNO")
| companyid| RECORDNO | STAGE | STATE |
| -------- | ----- | ------- | ----- |
| 123 | 12 | 1 | P |
| 456 | 13 | 2 | A |
| 123 | 13 | 1 | S |
Таблица ввода, уникальная («companyid», «ID»)
| companyid| ID | STATE | task |
| -------- | ----- | ----- | ----- |
| 123 | 12 | Purchased | abc |
| 123 | 13 | Accesible | def |
| 456 | 13 | Store | abc |
| 456 | 14 | Store | klm |
Я выполняю задание, которое часто запускается каждые 6 часов. Мне нужно выбрать уникальные идентификаторы компаний, для которых состояние в таблице истории равно 'S', и задание в частоте = задача в таблице записей, а запись - это таблица истории = идентификатор в таблице записей, а текущая системная дата больше, чем дата в таблице частот. .
Основным требованием c является обработка задания (записей из таблицы записей), в котором дата меньше текущей системной даты. (Обратите внимание, что системная дата всегда указывается в UT C, а дата в таблице частот может быть настроена пользователем). companyid распространен во всех таблицах.
Я пробовал приведенный ниже запрос, чтобы получить результат без фильтров даты. Нужна помощь в получении фильтра времени правильно.
select distinct cny#
from frequency
where exists
(select 1
from history, entry
where history.companyid = entry.companyid
and history.state='S'
and history.record# = entry.id);