Postgresql复杂的案例陈述

时间:2014-08-04 21:30:26

标签: sql window-functions case-statement

我需要创建一个case语句,它将返回以下内容

Cust_id   Indicator    Date       Case

101          Y        5/1/2014    5/1/2014
101          Y        5/4/2014    5/4/2014
101          Y        5/8/2014    5/8/2014
101          N        5/8/2014    5/8/2014
101          N        5/12/2014   5/8/2014
101          N        5/14/2014   5/8/2014
101          Y        5/18/2014   5/18/2014

指标列将在Y和N之间交替。当列为Y时,它会抓取日期并将其返回到案例列中。当前一个指标是Y并且当前指标是N时,它抓住前一个日期,该日期将继续,直到遇到另一个Y.在上面的例子中,我不确定如何让5/8/2014继续,直到我到达下一个Y(2014年5月18日)。

对不起,这很复杂,但上表应该有助于澄清。我想我需要使用子查询和窗口函数,但我完全没有想法。我已经在这方面工作了好几个小时,我的同事没有想法,所以非常感谢任何帮助。

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

你可以通过做一个有条件的累积最大值来做到这一点:

select cust_id, indicator, date,
       max(case when indicator = 'y' then date end) over (partition by cust_id
                                                          order by date) as NewCol
from table t;