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