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

时间:2015-01-15 08:30:53

标签: mysql select sum

我的表是“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;谢谢,

3 个答案:

答案 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
;