немного новичок в SQL, поискал в Интернете, но не смог найти ответа.
База данных SQL - это база данных Snowflake, которая, как мне кажется, является базой данных ANSI.
У меня есть таблица фактов, как показано ниже. Возможны комбинации одной и той же проблемы / UPC / склад / даты, поскольку новая запись добавляется всякий раз, когда сообщается о новой проблеме.
![enter image description here](https://i.stack.imgur.com/nFDnI.png)
Исключить Столбец - это то, что я пытаюсь выяснить - он должен быть «Y», если комбинация Issue / UPC / Warehouse и Date находится в таблице исключений, показанной ниже. ![enter image description here](https://i.stack.imgur.com/3XzWw.png)
Сложность заключается в том, что данные находятся на уровне отдельного дня, но я хочу исключить их, если они попадают в диапазон.
Итак, вот, следует исключить только I-100/1234 / China / 5-5-2019 и I-324/1349 / NewYork / 6-1-2019, так как они соответствуют значениям и диапазонам дат в таблице исключений.
Я попробовал следующий запрос, но SELECT for DATES BETWEEN возвращает более 1 записи и дает мне эту ошибку Single-row subquery returns more than one row.
update "FactDetails"
set "EXCLUDE" = 'Y'
where ("UPC","Warehouse", "Issue") in
("UPC","Warehouse", "Issue" from "Exclusions"
where "PLANT_NUMBER" is not null
and "ISSUE_CODE" is not null)
and "Date" between
(select "DATE_FROM" from "Exclusion"
where "PLANT_NUMBER" is not null
and "ISSUE_CODE" is not null) and
(select "DATE_TO" from "Exclusion"
where "PLANT_NUMBER" is not null
and "ISSUE_CODE" is not null);
Другая сложность заключается в том, что таблица исключений может иметь «уровни» для исключения комбинации UPC / Выпуск / Склад. Warehouse - это наиболее специфичный c, а если только UP C, он охватывает большую часть данных. ![enter image description here](https://i.stack.imgur.com/EcZOr.png)