如何从 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 你怎么知道哪一行是“前”一行?例如,如果col1d,那么“上一个”行是否会有col1c 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 中获取以前的记录值的主要内容,如果未能解决你的问题,请参考以下文章

mysql 获取字段值总和

如何在更新后的风帆中获取以前的值记录?

如何使用会话ID从php mysql中的两个或多个表中获取值

如何从点击的数字中获取值(数字)

使用 C# 获取 MySQL 记录数

如何从弹性搜索中获取最后30分钟的记录