Не корректно отрабатывает условие по сравнению предыдущего и настоящего значений а именно lag_amt_3 > lag_amt_2
CREATE TABLE if not exists STG_TRANSACTIONS_TYPE as
SELECT
trans_date,
oper_type,
oper_result,
amt,
card_num,
lag(trans_date, 3) over (partition by card_num order by trans_date) as lag_time,
lag(oper_result) over (partition by card_num order by trans_date) as lag_result_1,
lag(oper_result, 2) over (partition by card_num order by trans_date) as lag_result_2,
lag(oper_result, 3) over (partition by card_num order by trans_date) as lag_result_3,
lag(amt) over (partition by card_num order by trans_date) as lag_amt_1,
lag(amt, 2) over (partition by card_num order by trans_date) as lag_amt_2,
lag(amt, 3) over (partition by card_num order by trans_date) as lag_amt_3
FROM DWH_FACT_TRANSACTIONS
WHERE oper_type = 'WITHDRAW'
OR oper_type = 'PAYMENT';
CREATE TABLE if not exists STG_TRANSACTIONS_LAG as
SELECT
trans_date,
oper_type,
oper_result,
amt,
card_num,
lag_time,
lag_result_1,
lag_result_2,
lag_result_3,
lag_amt_1,
lag_amt_2,
lag_amt_3,
((JULIANDAY(trans_date) - JULIANDAY(lag_time)) * 24 * 60) as delta_time
FROM STG_TRANSACTIONS_TYPE
WHERE oper_result = 'SUCCESS'
AND lag_result_1 = 'REJECT'
AND lag_result_2 = 'REJECT'
AND lag_result_3 = 'REJECT'
AND lag_amt_3 > lag_amt_2
AND lag_amt_2 > lag_amt_1
AND lag_amt_1 > amt
AND ((JULIANDAY(trans_date) - JULIANDAY(lag_time)) * 24 * 60) < 20;
Имеется вот такой код по созданию таблицы через выборку, при выполнении всех условий по выборке выдается одна запись, хотя по данным из таблицы есть еще одна которая подходит под все условия но не попадает в выборку. Но если убрать условие lag_amt_3 > lag_amt_2 то получается две записи попадающие под условие выборки.
На скриншоте сначала выполнен запрос со всеми условиями, далее запрос без условия lag_amt_3 > lag_amt_2. Подскажите добрые люди в чем может быть проблема?
Источник: Stack Overflow на русском