【问题标题】:How to get previous record value from MySql Query如何从 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
  • 无论哪个记录是以前的,哪个是它的值。当查询将被获取时,结果应该像上面一样。@Martin

标签: mysql


【解决方案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

    【讨论】:

    • 谢谢,我喜欢避免加入。
    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2012-08-23
    • 2011-08-31
    相关资源
    最近更新 更多