Sql server 2012 更新SQL Select语句中每一行上的变量

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

我试图根据不等于1000的最新代码更新一列,如果有重复的1000个代码,它们都应该更改为不等于1000的最新代码

在SQL Server 2012中,我尝试了lag语句,创建一个行ID并连接到同一个表1行,这两个行都可以工作,但问题是重复。一行可以有1000个代码,但我需要保留时间戳,并将它们全部更改为不等于1000的最新代码

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。