【问题标题】:Postgresql complicated case statementpostgresql 复杂case语句
【发布时间】:2014-08-04 21:30:26
【问题描述】:

我需要创建一个将返回以下内容的 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

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

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

提前谢谢你。

【问题讨论】:

    标签: sql window-functions case-statement


    【解决方案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;
    

    【讨论】:

    • 做到了,而且运行得非常好。非常感谢!
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多