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

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

我的 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-人物ID; AID-活动ID;活动价值

我的目标:

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

总和1=12; Sum2=32+12;总和3=5; Sum4=21+32+12; Sum5=12+5; Sum6=19+12+5; Sum7=11+21+32; Sum8=6+19+12;谢谢,

你是根据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

要使用前两行和当前行,

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;

抱歉之前错误的回答(已删除)。 这会根据您的示例生成正确答案:

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
;