繁体   English   中英

如何计算MySQL表中SUM的上一行和当前行的值?

[英]How to calulate SUM previous and current row value in MySQL table?

我的表是“ Activity_table”,其中有4列。 如何创建一个函数,每个Peroson 2先前和当前活动的总和? 我的Activity_table

ID  PID AID Act
1   1   1   12
2   1   2   32
3   2   1   5
4   1   3   21
5   2   2   12
6   2   3   19
7   1   4   11
8   2   4   6

PID-是PersonID; AID-ActivitieID; 行为价值

我的目标:

ID  PID AID Act SUM
1   1   1   12  12
2   1   2   32  44
3   2   1   5   5
4   1   3   21  65
5   2   2   12  17
6   2   3   19  36
7   1   4   11  64
8   2   4   6   37

SUM1 = 12; SUM2 = 32 + 12; SUM3 = 5; SUM4 = 21 + 32 + 12; Sum5 = 12 + 5; Sum6 = 19 + 12 + 5; Sum7 = 11 + 21 + 32; Sum8 = 6 + 19 + 12; 谢谢,

要使用前两行和当前行,

SELECT ID,PID,AID,Act,
    (SELECT SUM(Act) 
     FROM Activity_table 
     WHERE ID <= a.ID
     AND ID >= a.ID - 2
     AND PID = a.PID) 
FROM Activity_table a;

您是根据PID对SUM进行计算吗? 然后,目标的最后两行应修改为:

7   1   4   11  **76**
8   2   4   6   **42**

最灵活的查询是您的要求,

SELECT ID,PID,AID,Act,
    (SELECT SUM(Act) 
     FROM Activity_table 
     WHERE ID <= a.ID
     AND PID = a.PID) 
FROM Activity_table a;

然后,如果您只需要特定PID的SUM流程,则可以像这样更改它,

SELECT ID,PID,AID,Act,
    (SELECT SUM(Act) 
     FROM Activity_table 
     WHERE ID <= a.ID
     AND PID = a.PID) 
FROM Activity_table a
WHERE PID = 2;

结果:

ID  PID AID Act SUM
3   2   1   5   5
5   2   2   12  17
6   2   3   19  36
8   2   4   6   42

对不起,以前的答案不正确(已删除)。 这将根据您的示例产生正确的答案:

SET @LastPID = 0, @Act1 = 0,@Act2 = 0,@Act3 = 0;
SELECT ID,PID,AID,Act,`SUM` FROM 
    (
    SELECT ID,PID,AID,Act,@Act3 := IF(@LastPID != PID, 0,@Act2),@Act2 := IF(@LastPID != PID, 0,@Act1), @Act1 := Act, @Act1 + @Act2 + @Act3 `SUM`, @LastPID := PID
    FROM Activity_table
    ORDER BY PID,ID
    ) sm
ORDER BY ID
;

暂无
暂无

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

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