首页 > 解决方案 > 如何将相关行的值添加到 SQL 中的列

问题描述

我有一个包含合同信息的表格,我想添加一个计算列,用于标识合同何时与同一客户的前一个合同连续。因此,当合同的结束日期与同一客户的下一个合同的开始日期相匹配时,我们认为这是连续的。

数据如下所示:

在此处输入图像描述

我希望它看起来像这样:

在此处输入图像描述

我尝试对其自身进行合同表的内部连接,然后将其合并,但我认为这不是最有效的方法。

你知道实现这一目标的更好方法吗?

提前致谢。

标签: sqlprestotrino

解决方案


下面的代码在SQL Server上进行了测试,但也可以在Presto上运行。SQL Serverbit值而不是booleans,所以我返回TRUEFALSE作为字符串。希望您能够进行任何必要的修改。

SELECT
  c.contract_id
  ,c.client
  ,c.start_date
  ,c.end_date
  ,CASE
       WHEN LAG(c.end_date) OVER (PARTITION BY c.client ORDER BY c.start_date) = c.start_date
       THEN 'TRUE' ELSE 'FALSE'
   END as is_consecutive
  ,CASE
       WHEN LAG(c.end_date) OVER (PARTITION BY c.client ORDER BY c.start_date) = c.start_date
       THEN LAG(c.contract_id) OVER (PARTITION BY c.client ORDER BY c.start_date)
   END as related_previous
  ,CASE
       WHEN LEAD(c.start_date) OVER (PARTITION BY c.client ORDER BY c.start_date) = c.end_date
       THEN LEAD(c.contract_id) OVER (PARTITION BY c.client ORDER BY c.start_date)
   END as related_next
FROM
  contract c

推荐阅读