子查询返回超过 1 个值 - 使用特定日期的值更新日期范围内的记录
Subquery returned more than 1 value - Updating records over a date range with values from a specific date
我正在尝试为比“2020-10-12”更新的记录更新 LocationNumber 值。更新的记录应该是 LocationNumber 不等于“2020-10-10”的记录。 12 号之后,某些记录的 LocationNumber 值变得不正确,所以我正在尝试修复它们。
编辑:记录必须存在于“2020-10-10”,我不想更新该日期不在系统中的新记录。
以下是我尝试过的选项:
update ReadHeader as z0
set locationnumber = z1.locationnumber
from ReadHeader as z1
where z1.identifier = z0.identifier
and z1.LocationNumber in(select LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
and z0.LocationNumber in(select LocationNumber from ReadHeader where ReadLogDate > '2020-10-12')
and z0.LocationNumber not in(select LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
update ReadHeader SET LocationNumber = (SELECT LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
where ReadLogDate > '2020-10-12'
and LocationNumber not in(select LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
样本数据,每天都有数以千计的唯一“标识符”读取,我只想修复那些在“2020-10-12”之后位置编号不正确的标识符
Identifier LocationNumber AcctNum ReadLogDate Read Value
T108468264 336086 94103494 '2020-10-10' 5
T108468264 336086 94103494 '2020-10-11' 8
T108468264 888888 94103494 '2020-10-12' 19
T108468264 888888 94103494 '2020-10-13' 25
T108468264 888888 94103494 '2020-10-14' 30
需要的结果:
Identifier LocationNumber AcctNum ReadLogDate Read Value
T108468264 336086 94103494 '2020-10-10' 5
T108468264 336086 94103494 '2020-10-11' 8
T108468264 336086 94103494 '2020-10-12' 19
T108468264 336086 94103494 '2020-10-13' 25
T108468264 336086 94103494 '2020-10-14' 30
感谢任何帮助!
嗯。 . .使用可更新的 CTE:
with toupdate as (
select rh.*,
max(case when ReadLogDate = '2020-10-12' then locationnumber end) over (partition by identifier) as locationnumber_20201012
from ReadHeader rh
)
update toupdate
set locationnumber = locationnumber_20201012
where readlogdate > '2020-10-12';
我正在尝试为比“2020-10-12”更新的记录更新 LocationNumber 值。更新的记录应该是 LocationNumber 不等于“2020-10-10”的记录。 12 号之后,某些记录的 LocationNumber 值变得不正确,所以我正在尝试修复它们。
编辑:记录必须存在于“2020-10-10”,我不想更新该日期不在系统中的新记录。
以下是我尝试过的选项:
update ReadHeader as z0
set locationnumber = z1.locationnumber
from ReadHeader as z1
where z1.identifier = z0.identifier
and z1.LocationNumber in(select LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
and z0.LocationNumber in(select LocationNumber from ReadHeader where ReadLogDate > '2020-10-12')
and z0.LocationNumber not in(select LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
update ReadHeader SET LocationNumber = (SELECT LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
where ReadLogDate > '2020-10-12'
and LocationNumber not in(select LocationNumber from ReadHeader where ReadLogDate = '2020-10-10')
样本数据,每天都有数以千计的唯一“标识符”读取,我只想修复那些在“2020-10-12”之后位置编号不正确的标识符
Identifier LocationNumber AcctNum ReadLogDate Read Value
T108468264 336086 94103494 '2020-10-10' 5
T108468264 336086 94103494 '2020-10-11' 8
T108468264 888888 94103494 '2020-10-12' 19
T108468264 888888 94103494 '2020-10-13' 25
T108468264 888888 94103494 '2020-10-14' 30
需要的结果:
Identifier LocationNumber AcctNum ReadLogDate Read Value
T108468264 336086 94103494 '2020-10-10' 5
T108468264 336086 94103494 '2020-10-11' 8
T108468264 336086 94103494 '2020-10-12' 19
T108468264 336086 94103494 '2020-10-13' 25
T108468264 336086 94103494 '2020-10-14' 30
感谢任何帮助!
嗯。 . .使用可更新的 CTE:
with toupdate as (
select rh.*,
max(case when ReadLogDate = '2020-10-12' then locationnumber end) over (partition by identifier) as locationnumber_20201012
from ReadHeader rh
)
update toupdate
set locationnumber = locationnumber_20201012
where readlogdate > '2020-10-12';