如何从 MySql Query 中获取以前的记录值
Posted
技术标签:
【中文标题】如何从 MySql Query 中获取以前的记录值【英文标题】:How to get previous record value from MySql Query 【发布时间】:2013-08-16 12:19:29 【问题描述】:我想获取以前的记录值来计算当前值;
示例: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 解决问题
【问题讨论】:
您需要使用JOIN
。
你怎么知道哪一行是“前”一行?例如,如果col1
是d
,那么“上一个”行是否会有col1
或c
?
SQL 方面没有previous
行
可能重复Calculate a running total in MySQL
无论哪个记录是以前的,哪个是它的值。当查询将被获取时,结果应该像上面一样。@Martin
【参考方案1】:
假设一个这样的起始表:
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)
【讨论】:
我想应该是@a := @a + col2 col3
。
@Jeremy:太好了。谢谢【参考方案2】:
SELECT col1, col2, @a := @a + col2 col3
FROM Table1 JOIN (SELECT @a := 0) t;
FIDDLE
【讨论】:
【参考方案3】:我认为此解决方案可能会满足您的需求。
set @a = null;
SELECT @a as previousCol2value , col1, col2, @a := col2 ignoreThis
FROM Table1 ;
如果您想查看它的实际效果,请查看下面的 SQL FIDDLE:
http://www.sqlfiddle.com/#!2/774ff/42/1
【讨论】:
谢谢,我喜欢避免加入。以上是关于如何从 MySql Query 中获取以前的记录值的主要内容,如果未能解决你的问题,请参考以下文章