sql - 如何将相关行的值添加到 SQL 中的列
问题描述
我有一个包含合同信息的表格,我想添加一个计算列,用于标识合同何时与同一客户的前一个合同连续。因此,当合同的结束日期与同一客户的下一个合同的开始日期相匹配时,我们认为这是连续的。
数据如下所示:
我希望它看起来像这样:
我尝试对其自身进行合同表的内部连接,然后将其合并,但我认为这不是最有效的方法。
你知道实现这一目标的更好方法吗?
提前致谢。
解决方案
下面的代码在SQL Server上进行了测试,但也可以在Presto上运行。SQL Server有bit
值而不是boolean
s,所以我返回TRUE
和FALSE
作为字符串。希望您能够进行任何必要的修改。
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
推荐阅读
- facebook - 访问适用于 Android 应用程序的 Facebook 3D 照片 API/共享功能
- angular - 1033 像素的 mat-menu 大小问题;截断数据
- c - 运行程序时出现分段错误(核心转储)
- angular - 错误:未找到 MatSnackBarContainer 的组件工厂
- node.js - mlab/MongoDB atlas 和自托管 mongodb 有什么区别
- sql - 如何选择具有 MAX(列值)的行
- javascript - 在 Express API 上 POST 后返回插入的 Id
- excel - VBA 可以将工作簿保存到 Sharepoint 但之后无法读取
- python - Altair 十六进制的默认调色板颜色
- google-apps-script - 提交谷歌表单时如何发送自定义电子邮件?