這update
運行作爲存儲proceducre即會insert
或update
記錄在我的Information
表的一部分:如何在插入或更新另一條記錄時更新所有記錄上的日期字段?
UPDATE [Information] SET
[TermDate] = @aEffDate
WHERE [InformationID] = (SELECT ISNULL(MAX(InformationID),0)
FROM Information
WHERE InformationID < @aInformationID
AND [DeletedBy] IS NULL
AND [DeletedOn] IS NULL
AND Code = @aCode)
基本上,它看起來第二最新的記錄(根據關ID),並將該記錄的TermDate
到當前記錄的EffDate
。問題是,這假定用戶以最新到最新的順序輸入記錄。
我已經在上面嵌套的select
聲明中添加了另一個子句,以包含AND EffDate < @aEffDate
,它確保日期不會不當地終止。不過,現在我只是有null
TermDate列了一堆記錄時從MAX(InformationID)
返回的記錄有更大的EffDate
所以,假設以下
1)記錄與2015年11月2日EffDate進入
2)記錄與2015年9月1日EffDate
3)進入記錄與2015年10月3日輸入EffDate
4)記錄與09/15/201輸入5 EffDate
數據庫會看看這個:
InformationID | EffDate | TermDate --------------------------------------------- 1 | 11/02/15 | 09/01/15 2 | 09/01/15 | 10/03/15 3 | 10/03/15 | 09/15/15 4 | 09/15/15 | NULL
但它應該是這樣的:
InformationID | EffDate | TermDate --------------------------------------------- 1 | 11/02/15 | NULL 2 | 09/01/15 | 09/15/15 3 | 10/03/15 | 11/02/15 4 | 09/15/15 | 10/03/15
用戶應該在的秩序已經進入了記錄2,4,3, 1,這將爲每個記錄分配適當的TermDate。但不幸的是,我們不能強迫他們這樣做。
問題如何獲得EffDate與另一個記錄的EffDate最接近但不小於另一個記錄的EffDate並將該值指定爲另一個記錄的TermDate?
我已經刪除了InformationID
的檢查,以確保它們不相同; InformationID <> @aInformationID
但除此之外,我無法弄清楚如何得到「最接近」的日期。
請編輯您的問題,並提供樣本數據和所需的結果。 –