我试图使标题尽可能通用,但我确实有一个非常具体的例子:
我有一个表格,其中我的行有一个 StartDate 和一个 EndDate。每行也将与一个 ID 相关联。为了简单起见,我们假设开始时每个 EndDate 当前都是 NULL。
我想用以下逻辑填充 EndDates:
X 行的 EndDate 应对应于所有其他行的 StartDates 的最小值,该行的 ID 与 X 行相同,并且 StartDates 大于 X 行的 StartDate。
到目前为止,我提出的唯一解决方案涉及逐行循环并逐行执行更新语句,这具有糟糕的性能。我对这个有点迷茫。我使用一个包含我感兴趣的行的临时表(结束日期为空的行)循环遍历类似下面的内容:
UPDATE BaseTable
SET EffectiveEndDate=Minimum.Date
from (
select min(BaseTable.StartDate) as date, TempTable as RowId
FROM TempTable INNER JOIN BaseTable
on BaseTable.ID=TempTable.ID
where TempTable.row=@row
and BaseTable.StartDate > TempTable.StartDate
group by TempTable) Minimum
where BaseTable.Id=Minimum.RowId