如何从 sql 中的另一行获取值

How to get value from another row in sql

我有一个 sql 查询,如下所示:

    select 

    ,c.customer_leg1
,d.mid
        ,c.previous_customer_leg1  
        ,c.creation_date
    ,c.end_date
    ,c.cid

    from table1 c

    JOIN table2 d
    ON c.cid = d.cid
    where c.cid = '1234'

给出以下输出:

customer_leg1 | previous_customer_leg1 | creation_data | end_date | cid
4092          | 1888                   | 05/06/17      | 05/07/17 | 735
8915          | 4092                   | 05/06/17      | 05/08/17 | 735

我想添加一个新列,这样对于我们在 previous_customer_leg1 中发现的每个 customer_leg1,它应该将该行的 "end_date" 放在该列中。

例如:在上面输出的第 1 行中 customer_leg14092 并且在 previous_customer_leg1 的第 2 行中找到了它,所以在第 1 行中,这个 new_column 里面应该有 05/08/17。对于那些 customer_leg1 在 previous_customer_leg1 中不匹配的情况,它应该为 NULL。我想我可以为此使用分区和滞后函数,但我对这些不是很清楚。任何帮助将不胜感激。谢谢!

由于您只展示了 "the gist" 您想要的内容,也许 "the gist" 一种可能的解决方案是这样的:

将另一个连接添加到您的 "really huge" 查询:

select .....
     , c1.end_date as new_column
from   table1 c join table2 d   on c.cid = d.cid
                join talbe1 c1  on c.cid           = c1.cid 
                               and c.customer_leg1 = c1.previous_customer_leg1
..................

正如我在评论中询问的那样,您将确保正确显示 next row 的列是什么,因为您不能保证您的输出始终按相同的顺序排列。因此,假设 order 的列是 creation_date,并且您希望在 c.cidpartition 上完成此操作,您可以在 [=16] 中添加如下内容=] 语句来派生这个新列,而不会影响查询的其余部分。

免责声明:如果 partitionorder 的列不同,则此方法无效。请更改列。但是下面是 读取下一列的概念,如果匹配,则显示下一行的另一列

,CASE
    WHEN lead (c.previous_customer_leg1,1) 
            over (partition BY c.cid  ORDER BY c.creation_date) 
         = c.customer_leg1 
    THEN lead (c.end_date,1) over (partition BY c.cid ORDER BY c.creation_date)
END AS new_column