为Redshift CASE重新使用IIF语句

时间:2018-09-07 14:39:55

标签: sql amazon-redshift

我正在处理从客户端发出的查询,但是我们有不同的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

有人可以帮我重新配置吗?

1 个答案:

答案 0 :(得分:1)

在redshift Lag中,函数value_exproffset中只有两个参数。

  

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