Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql复杂case语句_Sql_Window Functions_Case Statement - Fatal编程技术网

Postgresql复杂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

我需要创建一个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为止。在上面的例子中,我不知道如何使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;

它做到了,而且运行得非常好。非常感谢你!