0
 
+--------+--------------+
| 进程 | 结束时间 |
+--------+--------------+
| 一个 | 2010/01/01 12:10:00.000 |
| 乙| 2010/01/01 12:08:00.000 |
| C | 2010/01/01 12:05:00.000 |
| D | 2010/01/01 12:02:00.000 |
| ...| ... |

所以基本上我从数据库中提取的数据看起来像上面那样,第一列是进程的名称,第二列是它完成运行的时间。我想添加第三列,它显示进程的运行时间。

基本上,我希望提取的数据看起来像这样:

 
+--------+--------------+--------------+
| 进程 | 结束时间 | 运行时间 |
+--------+--------------+--------------+
| 一个 | 2010/01/01 12:10:00.000 | | (进程 a 未完成运行)
| 乙| 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 | (假设开始时间为 12:00)
| ...| ... | ... |

而且我知道添加一startTime列并从中确定会更容易runningTime,但是我无权更改它,并且无论如何旧数据都没有 startTime 可以使用。

第一个进程的开始时间是任意的,但你明白我在说什么。我们根据 proc D 结束的时间和 proc C 结束的时间(从第二个减去第一个)来知道 proc C 的运行时间。

如何根据“Row X Col B”和“Row X-1 Col B”之间的差异计算第三行?

4

1 回答 1

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) 

或者,您可以使用类似的触发器在触发器中计算它。

于 2010-07-08T16:53:47.217 回答