Sql server 2012 更新SQL Select语句中每一行上的变量
我试图根据不等于1000的最新代码更新一列,如果有重复的1000个代码,它们都应该更改为不等于1000的最新代码 在SQL Server 2012中,我尝试了lag语句,创建一个行ID并连接到同一个表1行,这两个行都可以工作,但问题是重复。一行可以有1000个代码,但我需要保留时间戳,并将它们全部更改为不等于1000的最新代码Sql server 2012 更新SQL Select语句中每一行上的变量,sql-server-2012,Sql Server 2012,我试图根据不等于1000的最新代码更新一列,如果有重复的1000个代码,它们都应该更改为不等于1000的最新代码 在SQL Server 2012中,我尝试了lag语句,创建一个行ID并连接到同一个表1行,这两个行都可以工作,但问题是重复。一行可以有1000个代码,但我需要保留时间戳,并将它们全部更改为不等于1000的最新代码 SELECT EqmtID ,Reason ,StartTime FROM cyclesRID 产生: EqmtID
SELECT
EqmtID
,Reason
,StartTime
FROM cyclesRID
产生:
EqmtID Reason StartTime
1903010010000030808 1007 23759
1903010010000030808 1005 24965
1903010010000030808 1000 25382
1903010010000030808 1000 26078
1903010010000030808 1000 27180
1903010010000030808 1000 27761
1903010010000025572 1004 8601
我需要编辑select语句以生成:
EqmtID Reason StartTime
1903010010000030808 1007 23759
1903010010000030808 1005 24965
1903010010000030808 1005 25382
1903010010000030808 1005 26078
1903010010000030808 1005 27180
1903010010000030808 1005 27761
1903010010000025572 1004 8601
同样由EqmtID分区,如果分区的第一行是1000代码,那么它应该更改为1001
如果我在Python中这样做,我将使用一个变量,该变量仅在不等于1000时更新。SQL中是否可以执行类似的操作?一个选项是使用相关子查询查找最接近的非1000原因代码,以用于更新:
UPDATE c1
SET Reason = (SELECT TOP 1 Reason FROM cyclesRID c2
WHERE c2.EqmtID = c2.EqmtID AND
Reason <> 1000 AND c2.StartTime < c1.StartTime
ORDER BY StartTime DESC)
FROM cyclesRID c1
WHERE Reason = 1000;
一种选择是使用相关子查询查找更新中使用的最接近的非1000原因代码:
UPDATE c1
SET Reason = (SELECT TOP 1 Reason FROM cyclesRID c2
WHERE c2.EqmtID = c2.EqmtID AND
Reason <> 1000 AND c2.StartTime < c1.StartTime
ORDER BY StartTime DESC)
FROM cyclesRID c1
WHERE Reason = 1000;
先生,您是一位大师,非常感谢。一旦你看到它,它总是那么简单!非常感谢您的帮助。您已经实现了,并且它正在运行,我应该指出,它应该是第三行的c1.EqmtID=c2.EqmtID。您是一位大师,先生,非常感谢。一旦你看到它,它总是那么简单!非常感谢您的帮助。如果您已经实现并且它正在工作,我可能应该指出,它应该是第三行的c1.EqmtID=c2.EqmtID。