0
 
+ ------ + ------------------------- +
| 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 |
| ... | ... |

したがって、基本的に、データベースから取得するデータは上記のようになります。最初の列はプロセスの名前で、2番目の列は実行が終了した時刻です。プロセスの実行時間を表示する3番目の列を追加したいと思います。

基本的に、プルされたデータは代わりに次のようになります。

 
+ ------ + ------------------------- + -------------- +
| proc | endTime | runningTime |
+ ------ + ------------------------- + -------------- +
| A | 2010/01/01 12:10:00.000 | | (プロセスaの実行は完了していません)
| 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 | (開始時刻を12:00と想定)
| ... | ... | ... |

startTimeそして、列を追加してそれを決定する方が簡単であることはわかっていますがrunningTime、それを変更するためのアクセス権がありません。また、古いデータに関係なく、とにかく動作するstartTimeがありません。

最初のプロセスの開始時間は任意ですが、私が何をしているのかがわかります。procDがいつ終了したかとprocCがいつ終了したかに基づいてprocCの実行時間を知ることができます(2番目から1番目を引きます)。

「行X列B」と「行X-1列B」の違いに基づいて、その3番目の行を計算するにはどうすればよいですか。

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 に答える