简体   繁体   English

如何求和并在mysql的每一行中使用它

[英]how to sum total and use it in each row in mysql

hi I'm trying since yesterday to get the sum of each previous row and use it in the next row but I got the wrong results, my SQL statement is:嗨,我从昨天开始就试图获取前一行的总和并在下一行中使用它,但是我得到了错误的结果,我的 SQL 语句是:

SELECT `RegDate`,`RegdM2`,`RegdD2`,
(@s := @s + `RegdM2`-`RegdD2`) as xresult
from tblregs2 b
cross join (select @s := 0) c
INNER JOIN tblregs1 a ON b.RegRef = a.RegRef
WHERE `RegdAccID`=32
ORDER BY RegDate

tblregs1 definition is: tblregs1 定义是:

CREATE TABLE `tblregs1` (
`RegID` bigint(20) NOT NULL,
`RegRef` bigint(20) NOT NULL,
`RegCode` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`RegDate` date NOT NULL,
`RegCurr` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `tblregs1` (`RegID`, `RegRef`, `RegCode`, `RegDate`, `RegCurr`,         
`RegDetails`, `RegType`, `RegStatus`) VALUES
(1, 202010011140192, '', '2020-10-01', 1),
(2, 202010011141252, '', '2020-10-01', 1),
(3, 202010011141562, '', '2020-10-01', 1),
(4, 202010011143242, '', '2020-10-02', 0),
(5, 202010010103422, '', '2020-10-01', 1),
(6, 202010020836472, '', '2020-10-01', 0),
(7, 202010030101142, '', '2020-10-02', 0),
(8, 202010030101272, '', '2020-10-02', 0),
(9, 202010030101392, '', '2020-10-02', 0),
(10, 202010030101522, '', '2020-10-02', 0),
(11, 202010030102112, '', '2020-10-02', 0),
(12, 202010030153562, '', '2020-10-03', 1),
(14, 202010030158322, '', '2020-10-03', 1),
(15, 202010030431432, '', '2020-10-02', 0),
(16, 202010030439122, '', '2020-10-01', 1),
(17, 202010030512263, '', '2020-10-01', 1),
(18, 202010030515133, '', '2020-10-03', 2),
(19, 202010041255541, '', '2020-10-02', 1);

tblregs2 definition is: tblregs2 定义是:

CREATE TABLE `tblregs2` (
`RegdID` bigint(20) NOT NULL,
`RegRef` bigint(20) NOT NULL,
`RegdM1` double NOT NULL DEFAULT '0',
`RegdD1` double NOT NULL DEFAULT '0',
`RegdAccID` int(11) NOT NULL,
`RegdDetails` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`RegdCurrPrice` double NOT NULL DEFAULT '0',
`RegdM2` double NOT NULL DEFAULT '0',
`RegdD2` double NOT NULL DEFAULT '0',
`RecStatus` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Normal',
`RegdNo` tinyint(4) NOT NULL,
`RegdMtbkRaseed` double NOT NULL DEFAULT '0',
`RegdMtbkFark` double NOT NULL DEFAULT '0',
`RegdMtbkStatus` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`RegdMtbkNotes` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `tblregs2` (`RegdID`, `RegRef`, `RegdM1`, `RegdD1`,      
`RegdAccID`, `RegdDetails`, `RegdCurrPrice`, `RegdM2`, `RegdD2`,     
`RecStatus`, `RegdNo`, `RegdMtbkRaseed`, `RegdMtbkFark`, `RegdMtbkStatus`, 
`RegdMtbkNotes`) VALUES
(1, 202010011140192, 1000, 0, 916, 'Des1', 1, 1000, 0, 'Normal', 0, 0, 0, 
NULL, NULL),
(4, 202010011141252, 0, 10000, 32, 'Des1', 1, 0, 10000, 'Normal', 2, 0, 0, 
NULL, NULL),
(13, 202010011143242, 1680, 0, 32, 'Des1', 1, 1680, 0, 'Normal', 3, -8320, 
0, 'no', 'no'),
(14, 202010011143242, 0, 1680, 15, 'Des1', 1, 0, 1680, 'Normal', 4, 0, 0, 
NULL, NULL),
(16, 202010011143242, 0, 10, 32, 'Des1', 1, 0, 10, 'Normal', 6, 0, 0, 
NULL, NULL),
(17, 202010011143242, 15, 0, 32, 'Des1', 1, 15, 0, 'Normal', 7, -8315, 0, 
'', '-8315'),
(19, 202010011143242, 450000, 0, 32, 'Des1', 1235, 364.37, 0, 'Normal', 9, 
0, 0, '', ''),
(20, 202010011143242, 0, 450000, 306, 'Des1', 1, 0, 450000, 'Normal', 10, 
0, 0, NULL, NULL),
(33, 202010020836472, 0, 0, 916, '', 0, 0, 0, 'Normal', 9, 0, 0, NULL, 
NULL),
(34, 202010020836472, 0, 0, 86, '', 0, 0, 0, 'Normal', 10, 0, 0, NULL, 
NULL),
(35, 202010030153562, 1400, 0, 32, 'Des1', 32, 1400, 0, 'Normal', 0, 
-6550.63, 0, '', '12'),
(36, 202010030153562, 0, 1400, 55, 'Des1', 55, 0, 1400, 'Normal', 0, 0, 0, 
NULL, NULL),
(38, 202010030158322, 0, 7000, 32, 'Des1', 1, 0, 7000, 'Normal', 2, 0, 0, 
NULL, NULL),
(64, 202010041255541, 0, 4500, 32, 'Des1', 1, 0, 4500, 'Normal', 2, 0, 0, 
NULL, NULL),
(65, 202010041255541, 10, 0, 33, 'Des1', 1, 10, 0, 'Normal', 3, 0, 0, 
NULL, NULL),
(66, 202010041255541, 0, 10, 45, 'Des1', 1, 0, 10, 'Normal', 4, 0, 0, 
NULL, NULL);

example of my data for the specified user is:我的指定用户的数据示例是:

+-------+-----------+--------+-----------+--------+--------+
| RegID |  RegDate  | RegdID | RegdAccID | RegdM2 | RegdD2 |
+-------+-----------+--------+-----------+--------+--------+
|   2   | 10/1/2020 |    4   |     32    |    0   |  10000 |
+-------+-----------+--------+-----------+--------+--------+
|   4   | 10/2/2020 |   13   |     32    |  1680  |    0   |
+-------+-----------+--------+-----------+--------+--------+
|   4   | 10/2/2020 |   16   |     32    |    0   |   10   |
+-------+-----------+--------+-----------+--------+--------+
|   4   | 10/2/2020 |   17   |     32    |   15   |    0   |
+-------+-----------+--------+-----------+--------+--------+
|   4   | 10/2/2020 |   19   |     32    | 364.37 |    0   |
+-------+-----------+--------+-----------+--------+--------+
|   12  | 10/3/2020 |   35   |     32    |  1400  |    0   |
+-------+-----------+--------+-----------+--------+--------+
|   14  | 10/3/2020 |   38   |     32    |    0   |  7000  |
+-------+-----------+--------+-----------+--------+--------+
|   19  | 10/2/2020 |   64   |     32    |    0   |  4500  |
+-------+-----------+--------+-----------+--------+--------+

this is the result that gives me:这是给我的结果:

+-----------+--------+--------+--------+-----------+
|  RegDate  | RegdID | RegdM2 | RegdD2 |   Result  |
+-----------+--------+--------+--------+-----------+
| 10/1/2020 |    4   |    0   |  10000 |   -10000  |
+-----------+--------+--------+--------+-----------+
| 10/2/2020 |   13   |  1680  |    0   |   -8320   |
+-----------+--------+--------+--------+-----------+
| 10/2/2020 |   16   |    0   |   10   |   -8330   |
+-----------+--------+--------+--------+-----------+
| 10/2/2020 |   17   |   15   |    0   |   -8315   |
+-----------+--------+--------+--------+-----------+
| 10/2/2020 |   19   | 364.37 |    0   |  -7950.63 |
+-----------+--------+--------+--------+-----------+
| 10/2/2020 |   64   |    0   |  4500  | -18050.63 |
+-----------+--------+--------+--------+-----------+
| 10/3/2020 |   35   |  1400  |    0   |  -6550.63 |
+-----------+--------+--------+--------+-----------+
| 10/3/2020 |   38   |    0   |  7000  | -13550.63 |
+-----------+--------+--------+--------+-----------+

now I added all the requested data, hope that will help thanks, advanced现在我添加了所有请求的数据,希望能有所帮助,谢谢,高级

For 5.x version:对于 5.x 版本:

SELECT d.RegDate, 
       d.RegdID,
       d.RegdM2, 
       d.RegdD2, 
       CAST(@s := @s + d.RegdM2-d.RegdD2 AS DECIMAL(10,2)) AS xresult
FROM (SELECT a.RegDate,
             b.RegdM2, 
             b.RegdD2, 
             b.RegdID
       FROM tblregs2 b
       INNER JOIN tblregs1 a ON b.RegRef = a.RegRef
       WHERE b.RegdAccID=32 ) d
CROSS JOIN (SELECT @s := 0) c
ORDER BY d.RegDate, 
         d.RegdID;

For 8+ version and one account:对于 8+ 版本和一个帐户:

SELECT a.RegDate,
       b.RegdID,
       b.RegdM2, 
       b.RegdD2, 
       CAST(SUM(b.RegdM2-b.RegdD2) OVER (PARTITION BY RegdAccID 
                                         ORDER BY a.RegDate, b.RegdID) AS DECIMAL(10,2)) xresult
FROM tblregs2 b
INNER JOIN tblregs1 a ON b.RegRef = a.RegRef
WHERE b.RegdAccID=32
ORDER BY a.RegDate,
         b.RegdID;

For 8+ version and all accounts:对于 8+ 版本和所有帐户:

SELECT b.RegdAccID,
       a.RegDate,
       b.RegdID,
       b.RegdM2, 
       b.RegdD2, 
       CAST(SUM(b.RegdM2-b.RegdD2) OVER (PARTITION BY RegdAccID 
                                         ORDER BY a.RegDate, b.RegdID) AS DECIMAL(10,2)) xresult
FROM tblregs2 b
INNER JOIN tblregs1 a ON b.RegRef = a.RegRef
ORDER BY b.RegdAccID,
         a.RegDate,
         b.RegdID;

fiddle 小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM