首页 > 解决方案 > 如何在单个 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的内容,因此尚未终止。

标签: mysql

解决方案


这是一个想法

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

推荐阅读