Mysql 在新列中获取以前的列值
我有下表,命名为示例:Mysql 在新列中获取以前的列值,mysql,sql,Mysql,Sql,我有下表,命名为示例: col1 ---------- 101 102 103 104 我想在下面的结果现有列中添加一个结果 col1 newcol --------------- 101 0/''/null 102 101 103 102 104 103 SELECT COL1, @a := @a AS col2 FROM MYTABLE JOIN (SELECT @a := 0) t ORDER BY COL1
col1
----------
101
102
103
104
我想在下面的结果现有列中添加一个结果
col1 newcol
---------------
101 0/''/null
102 101
103 102
104 103
SELECT COL1, @a := @a AS col2
FROM MYTABLE JOIN (SELECT @a := 0) t
ORDER BY COL1;
我可以在对应的第二列中获得上一列的值吗
对于第一列,您可以使用保存最后一列
SELECT T1.`col1` AS col1,
(IFNULL(T2.`col2`,0)) AS new_col
FROM
table_name T1 LEFT JOIN table_name T2 ON T1.`col1`=(T2.`col1` - 1)
SELECT @a as Prev, @a:=COL1 as Current
FROM MYTABLE
ORDER BY COL1;
您可以在中找到更多信息
我希望你会觉得它有用
编辑:
删除了@a的初始化语句:
SET @a=0;
@a的第一个值将为空您可以使用a保存最后一个值
SELECT @a as Prev, @a:=COL1 as Current
FROM MYTABLE
ORDER BY COL1;
您可以在中找到更多信息
我希望你会觉得它有用
编辑:
删除了@a的初始化语句:
SET @a=0;
@a的第一个值将为NULL这有点复杂,但下面将处理它:
SELECT COL1,
(CASE WHEN (@oldprev := @prev) = NULL THEN NULL -- NEVER HAPPENS
WHEN (@prev := col1) = NULL THEN NULL -- NEVER HAPPENS
ELSE @oldprev
END) as prevcol
FROM MYTABLE CROSS JOIN
(SELECT @prev := 0) params
ORDER BY COL1;
注意:oldprev不需要初始化,因为它的值只在case中使用。这有点复杂,但下面处理它:
SELECT COL1,
(CASE WHEN (@oldprev := @prev) = NULL THEN NULL -- NEVER HAPPENS
WHEN (@prev := col1) = NULL THEN NULL -- NEVER HAPPENS
ELSE @oldprev
END) as prevcol
FROM MYTABLE CROSS JOIN
(SELECT @prev := 0) params
ORDER BY COL1;
注意:oldprev不需要初始化,因为它的值只在案例中使用。您可以使用相关子查询进行初始化:
SELECT col1, (SELECT col1
FROM mytable AS t2
WHERE t2.col1 < t1.col1
ORDER BY col1 DESC LIMIT 1) AS newcol
FROM mytable AS t1
注意:只要col1不包含任何重复项,查询就可以工作。您可以使用相关子查询:
SELECT col1, (SELECT col1
FROM mytable AS t2
WHERE t2.col1 < t1.col1
ORDER BY col1 DESC LIMIT 1) AS newcol
FROM mytable AS t1
注意:只要col1不包含任何重复项,查询就可以工作。如何确定上一列是什么?数字排序?@amber,基于其他列,值将显示如下,是数字存储如何确定上一列是什么?数字排序?@amber,根据其他列,值将如下显示,yes Numerical storedMySQL特别警告不要在同一选择中的不同表达式中使用和分配变量。而且,事实上,有时这不起作用,因为计算的顺序不能保证。。从MYTABLE中选择@a作为Prev,@a:=COL1作为Current,选择@a:=0 x ORDER BY COL1;谢谢@Gordon Linoff谢谢@David IslaThis仍然有问题:您正在同一选择中设置并使用@a变量。哦..好的..无论如何..谢谢@Giorgos Betsos,会处理好的this@GiorgosBetsos嗯。。。我明白了…那么我需要更多地了解这种行为。。谢谢你们!投票给戈登;MySQL特别警告不要在同一个select中的不同表达式中使用和分配变量。而且,事实上,有时这不起作用,因为计算的顺序不能保证。。从MYTABLE中选择@a作为Prev,@a:=COL1作为Current,选择@a:=0 x ORDER BY COL1;谢谢@Gordon Linoff谢谢@David IslaThis仍然有问题:您正在同一选择中设置并使用@a变量。哦..好的..无论如何..谢谢@Giorgos Betsos,会处理好的this@GiorgosBetsos嗯。。。我明白了…那么我需要更多地了解这种行为。。谢谢你们!投票给戈登;T2.col1-1可能不起作用,因为它不是必需的值将是串行的,是的,在示例中它显示为串行100101102。。但是实时可能是201101502302…T2.col1-1可能不起作用,因为它没有必要值是串行的,是的,在示例中串行显示100101102。。但实时可能是201101502302。。。