4

私は[RoleHistories]列を持つテーブルテーブルを持っています:

[RoleHistoryId] [PersonId] [開始] [終了]

[開始] 列に日付が入力されます。最後の列がヌルです。お一人様何列でもご利用いただけます。次のレコードの開始日になるように、終了列を更新する必要があります。後続のレコードがない場合、末尾は null のままにする必要があります

例えば

RoleHistoryId = 999, PersonId =1, Start=2009-1-1, End=null
RoleHistoryId = 2677, PersonId =1, Start=2011-5-1, End=null
RoleHistoryId = 4637, PersonId =1, Start=2013-9-1, End=null

私はしたいです

RoleHistoryId = 999, PersonId =1, Start=2009-1-1, End=2011-5-1
RoleHistoryId = 2677, PersonId =1, Start=2011-5-1, End=2013-9-1
RoleHistoryId = 4637, PersonId =1, Start=2013-9-1, End=null
4

1 に答える 1

4
UPDATE rh1 
SET    End = (SELECT Min(Start) 
              FROM   RoleHistories rh2 
              WHERE  rh1.Personid = rh2.Personid 
                     AND rh1.Start < rh2.Start) 
FROM RoleHistories rh1
WHERE End IS NULL
于 2013-06-10T16:19:07.147 に答える