簡體   English   中英

使用 mysql 更新減去上一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM