我正在处理从客户端发出的查询,但是我们有不同的SQL语言。我们使用不包含iif
函数的Redshift,坦率地说,我从未使用过。我知道这基本上是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
有人可以帮我重新配置吗?
答案 0 :(得分:1)
在redshift Lag中,函数value_expr
和offset
中只有两个参数。
LAG(value_expr [,offset]) [IGNORE 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