SQL Server 2012 - 协助自联接或CTE

时间:2015-11-20 16:04:16

标签: sql sql-server tsql

DBMS:SQL Server 2012

我有一个包含以下列的表

enter image description here

我需要做的是找出NextCarDepartureTime。因此,例如,Car2将于2014年9月30日1:12 AM离开,Car3将于2014年10月10日12:10离开。最终目标是找出CarDepartedDateTimeNextCarDepartedTime之间的小时差异。所以最终结果看起来像

enter image description here

任何帮助将不胜感激!感谢

2 个答案:

答案 0 :(得分:3)

您可以使用SQL Server 2012中引入的LEAD分析函数。此函数可以访问表中的后续行。所以你的查询现在看起来像这样 -

window

我在博客上写了一篇关于分析功能的博文:krishnrajrana.wordpress.com

答案 1 :(得分:2)

这将是您需要的基本语法:

SELECT
T1.Year, T1.Month, T1.CarNumberID, T1.CarDepartedDateTime, T1.NextCarNumberID,
T2.CarDepartedDateTime as [NextCarDepartureTime],
CONVERT(varchar,(T2.CarDepartedDateTime - T1.CarDepartedDateTime, 108) as [Turn Around Time]

FROM
DatabaseName..TableName T1
Left outer join DatabaseName..TableName T2 on T2.CarNumberID = T1.NextCarNumberID

根据表格中的其他详细信息(主键等),您可能希望向联接筛选器和/或WHERE子句添加详细信息。

有多种选项可供您使用[Turn Around Time]函数的最后一个参数的不同值格式化/显示CONVERT字段。有关不同选项的列表,请参阅https://msdn.microsoft.com/en-us/library/ms187928.aspx