下面是包含 uniqueid Number、Complete date 和 User id 列的表格。以下資料按用戶ID、完成日期排序。
如果前一行和 null 之后的行具有相同的數字,我想將 Uniqueid =456 的數字列更新為“xxxx 1111”。如果前一行或后一行為空或不同,則不更新。
基本上,我想按用戶 ID、完成日期對行進行排序,識別為空的行并檢查空記錄之后的前一行和一行,并使用與前一行和后行相同的編號更新空記錄。如果兩者都不匹配,則將其 NULL 記錄留空。謝謝你。
原版的
UniqueId Number Complete date UserId
----------------------------------------------------------
123 xxxx 1111 2022-03-17 11:19:07.000 11011
456 NULL 2022-03-17 11:22:50.000 11011
789 xxxx 1111 2022-03-17 11:28:32.000 11011
預期輸出:
UniqueId Number Complete date UserId
----------------------------------------------------------
123 xxxx 1111 2022-03-17 11:19:07.000 11011
456 xxxx 1111 2022-03-17 11:22:50.000 11011
789 xxxx 1111 2022-03-17 11:28:32.000 11011
SQL Server 2017 - T-SQL
我已經嘗試了磁區、最小值和最大值,但無法準確找到我想要的。
select
UserId, completedate, number,
newremarks = max(userid) over (partition by number order by userid, completedate)
from
foo
order by
userId, CompleteDate
我嘗試了類似上面顯示的代碼。
uj5u.com熱心網友回復:
您可以在此處使用lag&lead和可更新的 CTE:
with n as (
select *,
Lag(number) over(partition by UserId order by [Complete date]) pn,
Lead(number) over(partition by UserId order by [Complete date]) nn
from t
)
update n set number = pn
from n
where pn = nn and number is null;
見演示小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/447363.html
上一篇:為什么我會收到身份驗證錯誤?
下一篇:根據條件獲取兩個表之間的公共記錄
