2013-04-16 50 views
2

我有一個數據庫,其中包含一系列記錄,用於存儲一系列臨時交易和已完成交易之間的時間戳記。通過重複計算接力賽時間(在動態SQL中)

它存儲在一個非常奇怪的方式在數據庫中,這是我的問題。

讓我們舉例說明這是一場接力賽。這是數據記錄的方式。

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 

「時代」表示當接力棒傳遞和上屆亞軍已經完成。

因此,一個個人賽亞軍的時間背後的數學是:
時間(Runner_n)= 時間(Runner_n + 1) - 時間(Runner_n)

除獲得亞軍,那裏沒有N + 1記錄。他們得到:
時間(Runner_final)= FinishTime - 時間(最終)

我會嘗試做一個新的表格,並通過每場比賽迭代與cursor--嘗試和專賣店元組:種族, RunnerID,TimeCompleted。

回答

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