Postgresql复杂case语句
我需要创建一个case语句,它将返回以下内容Postgresql复杂case语句,sql,window-functions,case-statement,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
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为止。在上面的例子中,我不知道如何使2014年5月8日继续下去,直到我到达下一个Y(2014年5月18日)
抱歉,这很复杂,但上表应该有助于澄清。我想我需要使用一个子查询和一个窗口函数,但我完全没有办法。我已经为此工作了好几个小时,而我的同事们没有任何想法,所以非常感谢任何帮助
先谢谢你 您可以通过执行有条件的累积最大值来执行此操作:
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;
它做到了,而且运行得非常好。非常感谢你!