Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在另一列中获取下一行值_Sql_Sql Server_Tsql_Ssms - Fatal编程技术网

Sql 如何在另一列中获取下一行值

Sql 如何在另一列中获取下一行值,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我有一张桌子叫Opp桌 -------------------------------------- OppID Stage createdon newcolumn -------------------------------------- 1 Propsect 1-Jan 15-Jan 1 Qualify 15-Jan 25-Jan 1 Dev

我有一张桌子叫Opp桌

--------------------------------------
   OppID      Stage       createdon   newcolumn 
--------------------------------------
    1         Propsect    1-Jan        15-Jan 
    1         Qualify     15-Jan       25-Jan 
    1         Develop     25-Jan       9-Feb    
    1         Qualify     9-Feb        7-March    
    1         Develop     7-March      9-April 
    1         Prospect    9-April     10-March ----(actualclosedate)

我有一张叫stagechange的桌子

--------------------------------------
   OppID      Stage       createdon   
--------------------------------------
    1         Propsect    1-Jan        
    1         Qualify     15-Jan       
    1         Develop     25-Jan       
    1         Qualify     9-Feb       
    1         Develop     7-March     
    1         Prospect    9-April  
如何创建新列并获取createdon列中的下一行值;有这样的东西。如果没有更多的next值,我们将从其他表中获取日期,如Opp表中的实际结束日期

--------------------------------------
   OppID      Stage       createdon   newcolumn 
--------------------------------------
    1         Propsect    1-Jan        15-Jan 
    1         Qualify     15-Jan       25-Jan 
    1         Develop     25-Jan       9-Feb    
    1         Qualify     9-Feb        7-March    
    1         Develop     7-March      9-April 
    1         Prospect    9-April     10-March ----(actualclosedate)

假设
createdOn
存储为有效的日期/时间类型,并且“下一步”是指本列中的“下一步”,那么只需使用
lead()

这假设(尽管问题中没有明确说明)您希望根据
OppId
获得下一个日期


lead()
是大多数(但不是所有)数据库中可用的ANSI标准函数。

这将用
实际关闭日期替换最终/缺失的日期

Select A.*
      ,NewColumn = IsNull(Lead(creaton) over (Partition By A.OppID Order By A.CreateOn),B.actualclosedate)
 From  stagechange A
 Join  Opp         B on A.OppID=B.OppID

您可以使用COALESCE功能

createdon列的类型是什么?请使用您正在使用的数据库进行标记。提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。
Select A.*
      ,NewColumn = IsNull(Lead(creaton) over (Partition By A.OppID Order By A.CreateOn),B.actualclosedate)
 From  stagechange A
 Join  Opp         B on A.OppID=B.OppID