mysql - 如何在单个 ROW 中显示来自具有相同 ID 的不同行的不同日期?
问题描述
我正在尝试根据公共列值从不同行中获取日期并将其显示在单行中。
我们有下表
Contract ID Created_Date
-----------------------------
1 1/2/2014
1 2/3/2014
1 3/3/2014
2 4/3/2014
2 5/3/2014
2 6/3/2014
2 7/3/2014
3 8/3/2014
3 9/3/2014
4 10/3/2014
4 11/3/2014
5 12/3/2014
----------------------------
Created_Date
显示合同何时开始,当我们有新的日期时contract_id
,这意味着先前的合同已终止,新合同已开始。我想表明当 acontract
以单行开始和结束时。
以下是预期结果
Contract ID Created_Date Terminated_Date
----------------------------------------------------------------
1 1/2/2014 2/3/2014
1 2/3/2014 3/3/2014
1 3/3/2014 NULL
2 4/3/2014 5/3/2014
2 5/3/2014 6/3/2014
2 6/3/2014 7/3/2014
2 7/3/2014 NULL
3 8/3/2014 9/3/2014
3 9/3/2014 NULL
4 10/3/2014 11/3/2014
4 11/3/2014 NULL
5 12/3/2014 NULL
-----------------------------------------------------------
NULL values
是否存在,因为该特定合同没有进一步created_dates
的内容,因此尚未终止。
解决方案
这是一个想法
select
a.ContractID,
a.Created_Date,
b.Terminated_Date
from
(
select
ContractID,
Created_Date,
ROW_NUMBER() OVER (
ORDER BY
Created_Date ASC
) as rownum
from
Table1
) a
Left Join (
select
ContractID,
Created_Date as Terminated_Date,
ROW_NUMBER() OVER (
ORDER BY
Created_Date ASC
) as rownum
from
Table1
) b on b.ContractID= a.ContractID
and b.rownum = a.rownum + 1
推荐阅读
- swagger - 大摇大摆地支持节俭?
- html - 在 Open edX 中查询关于上传
- java - 如何调用这个泛型方法?
- ios - 如何快速检查时间重叠?
- node.js - 在 NodeJS 中访问 Laravel .env 文件配置
- javascript - 复选框 .checked 属性始终为 false
- d3.js - D3:创建响应范围条形图
- javascript - botbuilder v4 nodejs在提示对话框中添加快速回复facebook messenger
- objective-c - 游戏中心多人配对问题
- image-segmentation - 流域分割算法必然会失败的情况有哪些?