我有下表,名为Example:
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;
我可以在第二列中获取相应的前一列值 到第一栏
答案 0 :(得分:2)
您可以使用a
保存最后一个。
SELECT @a as Prev, @a:=COL1 as Current
FROM MYTABLE
ORDER BY COL1;
您可以在MySQL User-Defined Variables
中找到更多信息我希望你会发现它很有用。
<强> EDITED 强>:
删除了@a:
的初始化句子SET @a=0;
@a的第一个值为NULL
答案 1 :(得分:2)
这有点复杂,但以下处理它:
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
。
答案 2 :(得分:0)
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)
答案 3 :(得分:0)
您可以使用相关的子查询来执行此操作:
"parallax.js"
注意:只要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
不包含任何重复项,查询就会有效。