在新列中获取以前的列值

时间:2015-11-13 12:19:51

标签: mysql sql

我有下表,名为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;

我可以在第二列中获取相应的前一列值   到第一栏

4 个答案:

答案 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"

Demo here

注意:只要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 不包含任何重复项,查询就会有效。