Немного ново для SQL - db - это Snowflake, который, как мне кажется, соответствует ANSI
Основная таблица, показанная ниже. Возможны комбинации одной и той же проблемы / UPC / Warehouse / Date, поскольку новая запись добавляется всякий раз, когда сообщается о новой проблеме. Существуют и другие столбцы, но они не должны влиять на этот вопрос
Столбец исключения - это то, что я пытаюсь выяснить - он должен быть 'Y' если желаемая комбинация Issue / UPC / Warehouse и Date находится в таблице исключений, показанной ниже.
Сложная часть - это столбец LEVEL, определение того, должна ли совпадать комбинация UPC / Issue / Warehouse, или просто UPC / Issue, или просто UP C. Кроме того, записи в основной таблице должны находиться в диапазоне дат, чтобы их можно было исключить.
Визуально ожидаемый результат:
Это решение работает только на одном уровне (Issue / UPC / Warehouse), но я не могу понять, как сделать два других без перекрытия и возможности исключения записей при аварии.
update t
set exclude = 'Y'
where exists (select 1
from exclusions e
where e.issue_code = t.issue_code and
e.upc = t.upc and
e.warehouse = t.warehouse and
t.date between e.date_from and e.date_to);