如何获得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 解决方案: |
|
|
|
|
|