我试图使标题尽可能的通用,但我确实有这个想法很具体的例子:如何更新相关行基于最小/最大值的行
我有一个表的表其中我的行有一个StartDate和一个EndDate。每一行也将与一个ID相关联。为了简单起见,让我们假设开始每个EndDate都是NULL。
欲填充以下逻辑EndDates:
用于行X的结束日期应该对应于最小具有相同的ID的行的X和具有比所述起始日期StartDates更大所有其它行的StartDates的的行X.
到目前为止,我提出的唯一解决方案涉及逐行循环和逐行执行更新语句,这些语句的性能很糟糕。我在这一点上有点失落。我遍历类似于以下,使用保持着我感兴趣的(与空结束日期的那些)的行的临时表:
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 [email protected]
and BaseTable.StartDate > TempTable.StartDate
group by TempTable) Minimum
where BaseTable.Id=Minimum.RowId
你想出了什么解决方案? –
稍微过长,这是一个循环加这样的语句:UPDATE BaseTable SET effectiveEndDate为= Minimum.Date 从 (选择分钟(BaseTable.StartDate)日期,不是Temptable为RowId的 FROM不是Temptable INNER JOIN BaseTable 上BaseTable .ID = TempTable.ID 其中[email protected] 和BaseTable.StartDate> TempTable.StartDate group by TempTable)最小值 其中BaseTable.Id = Minimum.RowId; –
对不起格式化,但我不知道如何格式化这些评论。我应该指出TempTable保存关于这种情况下要更改的行的信息(具有空结束日期的行) –