如何实现另一个变量的开始时间作为变量的结束时间到来之前呢?

时间:2016-06-02 14:59:20

标签: sql sql-server

我这里有一张表(如下所示),它有相位和运行时间。我想要完成的是 使用前一阶段之后的阶段时间作为前一阶段的结束时间。

所以现在我有:

rownum PhaseName PhaseID      Time                    TimeEnd

 1      Air Removal          2 2016-06-01 11:46:46.000   2016-06-01 11:46:46.000

 2      Heat up              3 2016-06-01 11:56:47.000   2016-06-01 11:56:47.000

 3      Steriliztion         4 2016-06-01 12:06:17.000   2016-06-01 12:06:17.000

 4      Air Pressurization   5 2016-06-01 12:23:40.000   2016-06-01 12:23:40.000

5      Exhaust              6 2016-06-01 12:27:18.000   2016-06-01 12:27:18.000

6      Drying               7 2016-06-01 12:29:35.000   2016-06-01 12:29:35.000

7      Equalization         8 2016-06-01 12:34:36.000   2016-06-01 12:34:36.000

我想完成这个:

rownum PhaseName  PhaseID      Time                    TimeEnd

 1      Air Removal          2  2016-06-01 11:46:46.000   2016-06-01 11:56:47.000

 2      Heat up                 3  2016-06-01 11:56:47.000   2016-06-01 12:06:17.000

 3      Steriliztion         4  2016-06-01 12:06:17.000   2016-06-01 12:23:40.000

 4      Air Pressurization   5  2016-06-01 12:23:40.000   2016-06-01 12:27:18.000

 5      Exhaust              6  2016-06-01 12:27:18.000   2016-06-01 12:29:35.000 

 6      Drying               7  2016-06-01 12:29:35.000   2016-06-01 12:34:36.000

 7      Equalization         8  2016-06-01 12:34:36.000   2016-06-01 12:34:36.000 

- 没有结束时间的最后阶段......

原因是,我拥有在每个阶段捕获的数据,并且我正在尝试创建使用Phase作为Parent组的SSRS报告。但是我的数据随附了 阶段作为已嵌入捕获数据中的变量。我已经使用了很多CTE来达到我已经确定每个阶段发生的时间点,但现在需要弄清楚如何 达到上述结果。

2 个答案:

答案 0 :(得分:0)

你似乎在最后的CTE中说 - 我们称之为CTE,你想做什么      ....来自CTE LEFT JOIN CTE2 ON CTE.rownum = CTE2.Rownum + 1

默认右下角值(将为null)使用COALESCE(CTE2.TimeEnd,CTE1.TimeEnd)

答案 1 :(得分:0)

我只在Oracle中使用过这些分析函数,但SQL Server有这些相同的函数,称为LAG和LEAD,其中LAG查看当前行之前的行,LEAD查看当前行之后的行。 / p>

以下是语法示例,其中函数查看过去行的TimeEnd,并根据PhaseID(或RowID将其设置为TimeStart,因为两者都是顺序的,并且行的顺序相同)。

SELECT LAG(TimeEnd, 1) OVER (ORDER BY PhaseID) TimeStart

以下是有关这些分析功能的更多信息: http://blog.sqlauthority.com/2011/11/15/sql-server-introduction-to-lead-and-lag-analytic-functions-introduced-in-sql-server-2012/

编辑:这些功能仅在SQL Server 2012及更高版本中,但我发现了一篇文章,介绍了如何使用CTE在早期版本的SQL Server中模仿这些功能,就像您一直在做的那样:http://www.databasejournal.com/features/mssql/lead-and-lag-functions-in-sql-server-2012.html