Я работаю с запросом, который получил от клиента, но у нас разные языки SQL. Мы используем Redshift, который не включает функции iif
, и, честно говоря, я никогда не использовал. Я знаю, что это в основном другой способ выражения CASE
, верно? Вот запрос
select
*
,iif (datediff(day,
lag(event_date, 1, '1900-01-01') over (partition by client_id, error_id order by event_date),
event_date) <= 1
,'yes', 'no') flag
from table.a
Я думал, что это сработает, но он продолжает выдавать ошибку:
select
*,
CASE WHEN datediff(day, lag(event_date, 1, '1900-01-01')) OVER (PARTITION BY client_id, errord_id ORDER BY event_date) <= 1 THEN 'YES' ELSE 'NO' END flag
from dsa.sas_days
Может ли кто-нибудь помочь мне перенастроить это?
В красном смещении Отставание, в функции value_expr
и offset
есть только два параметра.
LAG (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
так что вы можете попробовать это.
select
*,CASE WHEN
datediff(day, lag(event_date, 1) OVER (PARTITION BY client_id, errord_id ORDER BY event_date),event_date) <= 1
THEN 'YES'
ELSE 'NO'
END flag
from dsa.sas_days
Спасибо, но, к сожалению, я получаю сообщение об ошибке: Invalid operation: Default parameter not be supported for window function lag; 1 statement failed.
.
Бинго. Спасибо!
дополнительный
)
послеlag()
.. который должен быть в конце