回答

收藏

如何获得Redshift / Postgresql LAG窗口函数来有选择地排除记录?

技术问答 技术问答 233 人阅读 | 0 人回复 | 2023-09-12

我在Redshift有这个表,我正试图编写和查询以下数据集。对于续订成功、子成功等第三行项目,我想将其标记为
/ ]% V& F! M2 i- s! Nis_first_renewal = true但它们以前可能有任何数量的 RENEWAL
8 _9 ~( X; b0 C' h+ d* J& kFailures在他们成功之前,我不能在这种情况下使用窗口函数LAG。+ s) v. p5 N* g7 e1 n
我也不能过滤掉FAILURES,因为我的查询需要那些FAILURES。
: X/ P$ ]5 ?) }0 o* Wid  phone   op      ts              pr  status   result is_first_renewal 3345       xxxx    590    SUB     SUCCESS 2   345   xxxx59                                                        59595959595958/02/2018RENEWAL FAILURE 3345  3345    xxxx   20101/03/2018 6:59RENEWAL SUCCESS TRUE 4  345      xxxx  2018年6:59 RENEWAL SUCCESS FALSE我目前的查询是这样的:! G- N1 O  v7 e/ }, f+ _2 }! K
CASE    WHEN (status = 'RENEWAL' AND result = 'SUCCESS         AND ( (last_value(CASE                               WHEN pr = 0.0 AND result= 'SUCCESS' THEN                                 TRUE                           END))                 OVER (PARTITION BY phone                ORDER BY ts ASC                 ROWS unbounded preceding) = 'SUB' ) THEN      TRUE    ELSE       FALSE    END AS is_first_renewalFROM notificationsWHERE ((charge_status = 'SUCCESS         OR (status ='RENEWAL      AND result = 'FAILED'))ORDER BY         op,                                phone,        ts;因此,目标是找到获得它的方法LAG忽略那些失败项目的函数…直到找到之前的成功子项目。有什么建议?提前感谢。
1 T9 V" t1 _: K3 `9 h/ U                                                               
1 J) i/ w6 m6 Y- ?2 d    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则