我的表是“Activity_table”,有4列。如何创建一个函数,它是每个Peroson 2之前和当前活动的SUM? 我的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;谢谢,
答案 0 :(得分:2)
使用前两行和当前行
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;
答案 1 :(得分:1)
你是根据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
答案 2 :(得分:0)
抱歉以前的错误答案(已删除)。 这会根据您的示例生成正确的答案:
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
;