1
我有如下表:減去先前行的值尊重分組
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
並獲得預期的結果如圖所示?
如何使用@product!= product ..'的方法不靈活?我認爲這是MySQL的最佳選擇。 –