Mysql 列匹配的累积和

Mysql 列匹配的累积和,mysql,sql,sum,Mysql,Sql,Sum,我想做一个查询,给我一个所有星期的累计总数,但以新月形的顺序显示它们,如 Person | Week 1 | Week2 = Week1 + Week2 | Week 3 = Week 1 + 2 + 3| 我的桌子像 ID | Week | Person | Item 1 | Item 2 | Item 3 | Iteration 一周的结果是所有项目的总和,迭代次数应该是该周的最高次数 到目前为止,我已经得出了这个结论,但结果不是预期的,因为所有行的周1总和都相等,这是错误的 SELEC

我想做一个查询,给我一个所有星期的累计总数,但以新月形的顺序显示它们,如

Person | Week 1 | Week2 = Week1 + Week2 | Week 3 = Week 1 + 2 + 3|
我的桌子像

ID | Week | Person | Item 1 | Item 2 | Item 3 | Iteration
一周的结果是所有项目的总和,迭代次数应该是该周的最高次数

到目前为止,我已经得出了这个结论,但结果不是预期的,因为所有行的周1总和都相等,这是错误的

SELECT person, w1sum, w2sum
FROM table AS t1, (

SELECT SUM( item1 + item2 + item3 ) AS w1sum
FROM table 
WHERE week =1
AND iteration
IN (

SELECT MAX( iteration ) 
FROM table
)
    GROUP BY person

) AS week1, 
(

SELECT SUM( item1 + item2 + item3 ) AS w2sum
FROM table 
WHERE week = 1 AND week = 2
AND iteration
IN (

SELECT MAX( iteration ) 
FROM table
)
    GROUP BY person

) AS week2

GROUP BY person

我认为您可以使用条件聚合来做您想做的事情:

select person,
       sum(case when week in (1) then item1 + item2 + item3 else 0 end) as week1,
       sum(case when week in (1, 2) then item1 + item2 + item3 else 0 end) as week2
       sum(case when week in (1, 2, 3) then item1 + item2 + item3 else 0 end) as week3
from table t
where not exists (select 1
                  from table t2
                  where t2.person = t.person and
                        t2.week = t.week and
                        t2.iteration > t.iteration
                 )
group by person;
where
子句获取每个人每周的最后一次迭代