我想要以下结果现有列,并具有一个添加结果
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;
我可以在第二列中获得上一个列值 到第一列
您可以使用
a
SELECT @a as Prev, @a:=COL1 as Current
FROM MYTABLE
ORDER BY COL1;
您可以在
MYSQL用户定义变量中找到更多信息 我希望您会发现它有用。
@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 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 col1, (SELECT col1
FROM mytable AS t2
WHERE t2.col1 < t1.col1
ORDER BY col1 DESC LIMIT 1) AS newcol
FROM mytable AS t1