如何从MySql Query获取以前的记录值

时间:2013-08-16 12:19:29

标签: mysql

我想获得先前的记录值来计算当前值;

示例:col3的当前值为=(前一个col3值+当前col2值)

注意:维护col1顺序并不重要。因为结果记录是由Select query提取的。

col1 | col2 | col3
------------------
a    | 1    | 1
b    | 2    | 3  <= 1+2
a    | 1    | 4  <= 3+1
d    | 3    | 7  <= 4+3

我认为这不是很难,但我无法使用mysql解决问题

3 个答案:

答案 0 :(得分:3)

假设有一个这样的起始表:

mysql> SELECT * FROM test;
+------+------+
| col1 | col2 |
+------+------+
| a    |    1 |
| b    |    2 |
| c    |    1 |
| d    |    3 |
+------+------+

...你可以通过这样做得到你想要的结果:

mysql> SELECT col1, col2, @a := @a + col2 AS col3 
    -> FROM test JOIN (SELECT @a := 0) t
    -> ORDER BY col1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| a    |    1 |    1 |
| b    |    2 |    3 |
| c    |    1 |    4 |
| d    |    3 |    7 |
+------+------+------+
4 rows in set (0.00 sec)

如果您撤消订单,则会根据您的问题陈述获得结果,即col2加上显示的订单中的上一个col3

mysql> SELECT col1, col2, @a := @a + col2 AS col3 
    -> FROM test JOIN (SELECT @a := 0) t
    -> ORDER BY col1 DESC;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| d    |    3 |    3 |
| c    |    1 |    4 |
| b    |    2 |    6 |
| a    |    1 |    7 |
+------+------+------+
4 rows in set (0.00 sec)

答案 1 :(得分:1)

SELECT col1, col2, @a := @a + col2 col3 
    FROM Table1 JOIN (SELECT @a := 0) t;

FIDDLE

答案 2 :(得分:1)

我认为这个解决方案可能会做你想要的。

set @a = null;
SELECT @a as previousCol2value , col1, col2, @a := col2 ignoreThis
    FROM Table1 ;

如果你想看到它的实际效果,请检查下面的SQL FIDDLE:

http://www.sqlfiddle.com/#!2/774ff/42/1