[英]Subtracting previous row using mysql update
數據庫中的表
日期 | 數量 | 姓名 | ID |
---|---|---|---|
12-01 | 10.00 | 約翰·多伊 | 1002 |
12-02 | 10.00 | 約翰·多伊 | 1003 |
11-01 | 50.00 | 約翰·多伊 | 8976 |
11-02 | 50.00 | 約翰·多伊 | 8977 |
09-01 | 50.00 | 約翰·多伊 | 6788 |
09-02 | 50.00 | 約翰·多伊 | 6799 |
09-02 | 50.00 | 艾麗西婭·多伊 | 6800 |
結果應該是這樣的:
月 | 數量 | 總增加/減少 | 姓名 |
---|---|---|---|
九月 | 100.00 | 100.00 | 約翰·多伊 |
十一月 | 100.00 | 0 | 約翰·多伊 |
十二月 | 20.00 | -80.00 | 約翰·多伊 |
你可以用這樣的查詢來做到這一點
SELECT a1.pdate
, SUM(a1.amount) AS amount
, SUM(a1.total) AS total
, a1.username AS username
FROM (
SELECT a.*, COALESCE(a.amount+LAG(amount) OVER (ORDER BY pdate),0) AS total
FROM am a
ORDER BY pdate
) AS a1
GROUP BY username,MONTH(pdate);
樣本
MariaDB [bernd]> SELECT * from am;
+----+------------+--------+----------+
| id | pdate | amount | username |
+----+------------+--------+----------+
| 1 | 2021-12-01 | 10.00 | john doe |
| 2 | 2021-12-02 | 10.00 | john doe |
| 3 | 2021-11-01 | 50.00 | john doe |
| 4 | 2021-11-02 | 50.00 | john doe |
+----+------------+--------+----------+
4 rows in set (0.02 sec)
MariaDB [bernd]> SELECT a1.pdate
-> , SUM(a1.amount) AS amount
-> , SUM(a1.total) AS total
-> , a1.username AS username
-> FROM (
-> SELECT a.*, COALESCE(a.amount+LAG(amount) OVER (ORDER BY pdate),0) AS total
-> FROM am a
-> ORDER BY pdate
-> ) AS a1
-> GROUP BY username,MONTH(pdate);
+------------+--------+--------+----------+
| pdate | amount | total | username |
+------------+--------+--------+----------+
| 2021-11-01 | 100.00 | 100.00 | john doe |
| 2021-12-01 | 20.00 | 80.00 | john doe |
+------------+--------+--------+----------+
2 rows in set (0.00 sec)
MariaDB [bernd]>
看起來這就是你要找的東西:
SELECT MONTHNAME(Last_trans) AS Month,
name,
total,
prevTotal,
total-IFNULL(prevTotal,0) AS Diff
FROM
(SELECT MAX(date) Last_trans,
MONTH(date) mth,
name,
SUM(amount) total,
LAG(SUM(amount)) OVER (PARTITION BY name ORDER BY MONTH(date)) prevTotal
FROM mytable
GROUP BY MONTH(date), name) V;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.