0

我想获取以前的记录值来计算当前值;

示例:col3 的当前值将是 =(以前的 col3 值 + 当前 col2 值)

注意:保持 col1 顺序并不重要。因为结果记录是由 Select 查询获取的。

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

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

4

3 回答 3

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)
于 2013-08-16T12:37:14.483 回答
1
SELECT col1, col2, @a := @a + col2 col3 
    FROM Table1 JOIN (SELECT @a := 0) t;

小提琴

于 2013-08-16T12:43:06.830 回答
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

于 2014-03-28T17:20:56.687 回答