Оператор case Snowflake SQL с выбором и объединением

Что я хотел бы сделать, так это то, что когда нет соединения для получения комиссий, я хочу использовать значение комиссии в поле fee_calc из последнего значения сборов/3, найденного в таблице. Например, если в таблице b указан месяц 2022-10-01, а в таблице нет доступного квартала, вернитесь к таблице и получите максимальную дату последней записи до 2022-10-01, которая будет 2022-09-30 end_date. Я пытаюсь выполнить запрос и получаю сообщение об ошибке в Snowflake, указывающее на то, что неподдерживаемый тип подзапроса не может быть оценен.

create or replace table tablea (
key varchar(500),
fees varchar(500),
start_date date,
end_date date
)

create or replace table tableb (
key varchar(500),
asofdate date
)


insert into tablea values ('123','100','2022-07-01','2022-09-30'),('345','200','2022-07-01','2022-09-30'),('123','60','2022-04-01','2022-06-30'),('345','60','2022-04-01','2022-06-30')

insert into tableb values ('123','2022-08-01'),('123','2022-09-01'),('123','2022-10-01'),('345','2022-09-01')

select b.key,b.asofdate,
a.fees,a.start_date,a.end_date,
case when a.fees is null then xxx else fees/3 end as fees_calc 
from tableb b 
left join tablea a on b.key = a.key 
and b.asofdate between a.start_date and a.end_date

Можете ли вы обновить свой пост с ожидаемой выходной таблицей?

lemon 10.01.2023 21:35

См. рисунок, выделено то, что мне нужно, логика должна говорить 33,33

Ryan Bennett 10.01.2023 21:55
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
0
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете создать CTE, чтобы сначала убедиться, что таблицы объединены, а затем рассчитать комиссию. Вы можете использовать задержку с игнорированием нулей, чтобы просмотреть предыдущее ненулевое значение в каждом фрейме окна:

with JOINED as
(
select   b.key
        ,b.asofdate
        ,a.fees
        ,a.start_date
        ,a.end_date
from tableb b left join tablea a on b.key = a.key and b.asofdate between a.start_date and a.end_date
)
select *       
       ,case when fees is null then 
           lag(fees) ignore nulls over (partition by key order by start_date, end_date) / 3 
        else fees/3 end as fees_calc 
from JOINED
;
КЛЮЧ ДАТА СБОРЫ ДАТА НАЧАЛА ДАТА ОКОНЧАНИЯ FEES_CALC 123 2022-08-01 100 2022-07-01 2022-09-30 33.33333333333 123 2022-09-01 100 2022-07-01 2022-09-30 33.33333333333 123 2022-10-01 нулевой нулевой нулевой 33.33333333333 345 2022-09-01 200 2022-07-01 2022-09-30 66,66666666667

Другие вопросы по теме