从上一行减去与分组有关的值

半人马座

我有下表:

CREATE TABLE `movm` (
    `id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `product` INTEGER NOT NULL,
    `value` DECIMAL(10, 2) NOT NULL
    -- ...
);

还有一些数据:

INSERT INTO `movm`(`product`, `value`) VALUES 
    (1, 1000),
    (1, -200),
    (1,  100),
    (2,   50),
    (2,  -10),
    (1,  100),
    (2,  -20);

我希望得到以下结果:

+----+---------+---------+----------+---------+
| id | product | value   | previous | current |
+----+---------+---------+----------+---------+
|  1 |       1 | 1000.00 |        0 |    1000 |
|  2 |       1 | -200.00 |     1000 |     800 |
|  3 |       1 |  100.00 |      800 |     900 |
|  6 |       1 |  100.00 |      900 |    1000 |
|  4 |       2 |   50.00 |        0 |      50 |
|  5 |       2 |  -10.00 |       50 |      40 |
|  7 |       2 |  -20.00 |       40 |      20 |

但始终要尊重GROUP BY 产品

我尝试了以下SQL:

SELECT
    `id`,
    `product`,
    `value`,
    @previous := (@current)           AS `previous`,
    @current  := (@current + `value`) AS `current`
    FROM
        `movm`,
        (
            SELECT
                @previous := 0,
                @current  := 0
        ) AS `__movm`;

因为它不尊重分组依据,所以总会汇总所有内容,因此没有决胜局。

已经做到了IF(@product != product, @current := 0, NULL); 可以,但是没有那么灵活。而且我还需要绕过任何顺序仅跟踪该产品的值,如您所见,它们没有排序(我认为这很容易解决将SQL封装在子查询中)。

所以:有没有更好的解决方案,我可以使用它GROUP BY product并获得所示的预期结果?

雷达

您需要有另一个变量来跟踪产品,并且还需要order by更改product变量并counters在产品值更改时重置

这会起作用。

SELECT
    id,
    product,
    value,
    @previous := IF( @prevProduct = product,@current,0)           AS previous,
    @current  := IF( @prevProduct = product, @current + value, value) AS current,
    @prevProduct := product as var_val 
    FROM
    movm,
        (
            SELECT
                @previous := 0,
                @current  := 0,
                @prevProduct := NULL
        ) AS `__movm`
    ORDER BY product

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从上一行中减去具有DataFrame中上一组值的行

来自分类Dev

按组从上一行减去值

来自分类Dev

从上一行R减去

来自分类Dev

如何从上一行中的上一行中的值减去一列中的值

来自分类Dev

如何从上一行中的上一行中的值减去一列中的值

来自分类Dev

如何从上一行中r的不同列中的值中减去一列中的值

来自分类Dev

Influxdb-减去前一行的值,按时间分组

来自分类Dev

子查询返回的多于一行的内容以及有关逻辑公式的帮助

来自分类Dev

如何处理WWDC 2014中有关Swift代码的一行错误

来自分类Dev

与List.Add()有关的问题:它仅显示最后一行

来自分类Dev

跨多行减去一行值

来自分类Dev

从下一行减去值

来自分类Dev

从上一行/值python添加值

来自分类Dev

使用 awk/sed 从上一行复制值

来自分类Dev

熊猫,如何从系列中的所有值中减去第一行的值?

来自分类Dev

从上一个日期中选择按值分组的行之间共享的所有值

来自分类Dev

如何将按数据帧分组的另一行减去另一行?

来自分类Dev

pandas:减去上一行的每一行,并按max将结果分组

来自分类Dev

根据apache doc中的这一行,有关maven扩展的更改将是什么?

来自分类Dev

获取有关每一行的统计信息并将其放入新列中。大熊猫

来自分类Dev

Python,有关分组功能的建议

来自分类Dev

如何从同一行中求和/减去时间值

来自分类Dev

按组从前一行sql中减去值

来自分类Dev

减去另一行

来自分类Dev

从Spark中的Cassandra的第一行和最后一行减去值

来自分类Dev

从上一行获取匹配组

来自分类Dev

SQL如何从上一行更新一行?

来自分类Dev

根据第一行值对观察值进行分组

来自分类Dev

从每个客户ID识别零值,然后从上一行下一行熊猫中获取值

Related 相关文章

  1. 1

    从上一行中减去具有DataFrame中上一组值的行

  2. 2

    按组从上一行减去值

  3. 3

    从上一行R减去

  4. 4

    如何从上一行中的上一行中的值减去一列中的值

  5. 5

    如何从上一行中的上一行中的值减去一列中的值

  6. 6

    如何从上一行中r的不同列中的值中减去一列中的值

  7. 7

    Influxdb-减去前一行的值,按时间分组

  8. 8

    子查询返回的多于一行的内容以及有关逻辑公式的帮助

  9. 9

    如何处理WWDC 2014中有关Swift代码的一行错误

  10. 10

    与List.Add()有关的问题:它仅显示最后一行

  11. 11

    跨多行减去一行值

  12. 12

    从下一行减去值

  13. 13

    从上一行/值python添加值

  14. 14

    使用 awk/sed 从上一行复制值

  15. 15

    熊猫,如何从系列中的所有值中减去第一行的值?

  16. 16

    从上一个日期中选择按值分组的行之间共享的所有值

  17. 17

    如何将按数据帧分组的另一行减去另一行?

  18. 18

    pandas:减去上一行的每一行,并按max将结果分组

  19. 19

    根据apache doc中的这一行,有关maven扩展的更改将是什么?

  20. 20

    获取有关每一行的统计信息并将其放入新列中。大熊猫

  21. 21

    Python,有关分组功能的建议

  22. 22

    如何从同一行中求和/减去时间值

  23. 23

    按组从前一行sql中减去值

  24. 24

    减去另一行

  25. 25

    从Spark中的Cassandra的第一行和最后一行减去值

  26. 26

    从上一行获取匹配组

  27. 27

    SQL如何从上一行更新一行?

  28. 28

    根据第一行值对观察值进行分组

  29. 29

    从每个客户ID识别零值,然后从上一行下一行熊猫中获取值

热门标签

归档