Sql server SQL update table-上一行中具有值的值
我有一张这样的桌子: 我希望我的结果如下所示: 因此,如果该值为1,则应从num列向上看,该值应替换为不是1的下一个值 我试着用滞后和内部选择更新表,用CTE和搜索数小时,但找不到解决方案 我希望有人能告诉我怎么做 PS:我不知道还有什么比使用图片更好的方法来整合我的表格。我能找个地方说明如何用这个分数来改进我的问题吗Sql server SQL update table-上一行中具有值的值,sql-server,tsql,Sql Server,Tsql,我有一张这样的桌子: 我希望我的结果如下所示: 因此,如果该值为1,则应从num列向上看,该值应替换为不是1的下一个值 我试着用滞后和内部选择更新表,用CTE和搜索数小时,但找不到解决方案 我希望有人能告诉我怎么做 PS:我不知道还有什么比使用图片更好的方法来整合我的表格。我能找个地方说明如何用这个分数来改进我的问题吗 我这里的标签也错了。但是我使用的所有其他东西都不起作用这个答案与MySQL有关,因为OP最初是这样表示的 注意答案的内容,以及答案的格式 DROP TABLE IF EXISTS
我这里的标签也错了。但是我使用的所有其他东西都不起作用这个答案与MySQL有关,因为OP最初是这样表示的 注意答案的内容,以及答案的格式
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(level VARCHAR(12) NOT NULL
,num INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,value VARCHAR(12) NOT NULL
);
INSERT INTO my_table VALUES
('root',110,'AAA'),
('root',109,'1'),
('root',108,'1'),
('root',107,'BBB'),
('root',106,'1'),
('root',105,'ccc'),
('root',104,'1'),
('root',103,'DDD'),
('root',102,'1'),
('root',101,'1'),
('root',100,'EEE'),
('root', 99,'1'),
('root', 98,'1');
SELECT level
, num
, x value
FROM
( SELECT a.*
, CASE WHEN value = 1 THEN @prev ELSE value END x
, CASE WHEN value <> 1 THEN @prev := value END y
FROM my_table a
, (SELECT @prev := null) vars
ORDER
BY num DESC
) n
ORDER
BY num DESC;
+-------+-----+-------+
| level | num | value |
+-------+-----+-------+
| root | 110 | AAA |
| root | 109 | AAA |
| root | 108 | AAA |
| root | 107 | BBB |
| root | 106 | BBB |
| root | 105 | ccc |
| root | 104 | ccc |
| root | 103 | DDD |
| root | 102 | DDD |
| root | 101 | DDD |
| root | 100 | EEE |
| root | 99 | EEE |
| root | 98 | EEE |
+-------+-----+-------+
您提到了LAG和CTE,但您将其标记为MySQL,而MySQL没有这些,您使用的是什么数据库?最好使用标记来显示表而不是图像。另外,你的问题中没有出现你的图像。我编辑了我的问题@BPS我如何使用减价?奥利:这是一个微软sql。我现在换了标签。如果您对标签有任何建议,我可以在这里使用,我也会很感激:为什么您在LAG方面没有成功?您尝试了什么,出现了什么错误?非常感谢您提供的详细信息!因此,下次我将以代码的形式输入所有代码:我不想复制和使用它,而是想了解一些代码。1.结尾后的x或y是什么?2.后面的n是什么意思?3.SELECT@prev:=null变量做什么?四,。建议使用OUUT创建一个CTE,并在更新中使用此CTE和连接?@StefanHubaer它们都是别名。您最初标记了您的问题MySQL,它不支持CTE,因此这是一种通过构造变量模拟这种行为的方法。在MySQL中,变量需要在使用前进行初始化。这可以通过单独的查询[SET@var=null;]或在查询本身内完成,如上所述。