2

我有一个数据库,其中有一个记录表,用于存储一系列临时事务和已完成事务之间的时间戳。

它以一种非常奇怪的方式存储在数据库中,这给我带来了问题。

让我们以接力赛为例。这就是数据的记录方式。

RACE         TIME                             RUNNER    FINISHTIME
 1      2011-09-28 11:27:01.437        1                2011-09-28 17:19:00.843
 1      2011-09-28 12:35:33.427        2                2011-09-28 17:19:00.843
 1      2011-09-28 12:36:15.270        3                2011-09-28 17:19:00.843

“时间”表示接力棒的传递和最后一名跑者完成的时间。

所以单个跑步者的时间背后的数学是:
Time(Runner_n) = Time(Runner_n+1) - Time (Runner_n)

除了终点赛跑者,没有 n+1 记录。他们得到:
Time(Runner_final) = FinishTime - Time(final)

我将尝试创建一个新表并使用游标遍历每场比赛——尝试存储以下元组:Race、RunnerID、TimeCompleted。

4

1 回答 1

2

这根本不需要动态 SQL,只需要一个连接。加入下一条记录。如果存在,则使用该记录中的时间。否则,使用比赛的完成时间:

select t.race, t.runner, t.time as starttime,
       coalesce(tnext.time, t.finishtime) as endtime,
       DATEDIFF(sec, t.time, coalesce(tnext.time, t.finishtime)) as Seconds
from t left outer join
     t tnext
     on t.race = tnext.race and
        t.runner = tnext.runner - 1
于 2013-04-16T19:40:00.470 回答