1

電流出力

Activity            FromTime                ToTime
-------------------------------------------------------------------
STOPPED INSIDE POI  2012-11-14 01:08:46.000 2012-11-14 01:19:46.000
MOVING INSIDE POI   2012-11-14 01:20:46.000 2012-11-14 01:21:46.000
MOVING OUTSIDE POI  2012-11-14 01:22:46.000 2012-11-14 01:22:46.000
STOPPED OUTSIDE POI 2012-11-14 01:23:46.000 2012-11-14 01:23:46.000
MOVING OUTSIDE POI  2012-11-14 01:24:46.000 2012-11-14 01:25:46.000

期待される出力

Activity            FromTime                ToTime
-------------------------------------------------------------------
STOPPED INSIDE POI  2012-11-14 01:08:46.000 2012-11-14 01:20:46.000
MOVING INSIDE POI   2012-11-14 01:20:46.000 2012-11-14 01:22:46.000
MOVING OUTSIDE POI  2012-11-14 01:22:46.000 2012-11-14 01:23:46.000
STOPPED OUTSIDE POI 2012-11-14 01:23:46.000 2012-11-14 01:24:46.000
MOVING OUTSIDE POI  2012-11-14 01:24:46.000 2012-11-14 01:25:46.000

これを行う簡単な方法はありますか?

4

2 に答える 2

1

これはあなたのために働くはずです:

UPDATE table1
SET ToTime = join_table.newToTime
FROM (
  SELECT t2.FromTime target, MIN(t1.FromTime) newToTime 
  FROM table1 t1 
  JOIN table1 t2 ON t1.FromTime > t2.FromTime
  GROUP BY t2.FromTime) join_table
WHERE FromTime = join_table.target

基本的に、現在の行よりも大きい最小値を探しています。FromTimeこれをの新しい値として使用しますToTimeFromTime一致するより大きいものが見つからないため、最後の行は更新されないことに注意してください。

于 2012-12-06T15:42:50.777 に答える
1
;with a as
(
select Activity, FromTime, ToTime, 
row_number() over (order by FromTime) rn from <yourtable>
)
select a.Activity, a.FromTime, coalesce(b.FromTime, a.ToTime) ToTime
from a left join a b on a.rn = b.rn - 1
order by a.rn
于 2012-12-06T15:46:44.457 に答える