+------+-------------------------+ | proc | endTime | +------+-------------------------+ | A | 2010/01/01 12:10:00.000 | | B | 2010/01/01 12:08:00.000 | | C | 2010/01/01 12:05:00.000 | | D | 2010/01/01 12:02:00.000 | | ...| ... |
基本上,我从数据库中提取的数据看起来与上面类似,第一列是进程的名称,第二列是完成运行的时间。我想添加一个THIRD列,它显示进程的运行时间。
基本上,我希望拉出的数据看起来像这样:
+------+-------------------------+--------------+ | proc | endTime | runningTime | +------+-------------------------+--------------+ | A | 2010/01/01 12:10:00.000 | | (process a is not done running) | B | 2010/01/01 12:08:00.000 | 00:03:00.000 | | C | 2010/01/01 12:05:00.000 | 00:03:00.000 | | D | 2010/01/01 12:02:00.000 | 00:02:00.000 | (assume 12:00 start time) | ...| ... | ... |
而且我知道添加startTime
列会更容易确定runningTime
,但是我没有权限更改它,并且无论旧数据是否都没有startTime无论如何都要工作。
第一个进程的开始时间是任意的,但是你看到我正在得到的东西。我们知道proc C的运行时间基于proc D何时结束,以及proc C何时结束(从第二个减去第一个)。
如何根据“Row X Col B”和“Row X-1 Col B”之间的差异计算第三行?
答案 0 :(得分:1)
我认为您不能将其添加为“计算列”。你可以很容易地在视图中计算它(MSSQL的所有代码。你的转换函数可能会有所不同):
select
e1.RowID,
e2.EndTime as StartTime,
e1.EndTime, runningtime=convert(varchar(20), e1.EndTime - e2.EndTime, 114)
from endtimetest e1
left join endtimetest e2 on e2.endtime =
(Select max(endtime)
from endtimetest
where endtime < e1.Endtime)
或者,您可以使用类似的东西在触发器中计算它。