我想在MYSQL中写一个累积和的查询。我的表中有一个外键,我想将它们的小时数作为累计总和。
表1
id(not primary key) Hours
1 4
2 4
1 5
我试过这个查询
select spent_hours := spent_hours + hours as spent
from time
join (select spent_hours := 0) s
我收到了这个
id(not primary key) hours spent
1 4 4
2 4 8
1 5 13
但我想要这个结果:
id(not primary key) Hours spent
1 4 4
2 4 4
1 5 9
答案 0 :(得分:1)
由于你有一个自动增量字段(让我们假设这个案例叫做record_id)你可以用这个小技巧来实现你想要的东西:
SELECT Main.id, Main.spentHours,
(
SELECT SUM(spentHours)
FROM Table1 WHERE Table1.id = Main.id
AND Table1.record_id >= Main.record_id
) as totalSpentHours
FROM Table1 Main
ORDER BY Main.record_id ASC
这将获取id,当前花费的时间,使用子选择,从该用户的当前ID及以上的所有小时。
答案 1 :(得分:0)
您需要额外的变量来跟踪每个ID中的累积总和:
select t.id, t.hours,
(@h := if(@i = id, @h + spent_hours,
if(@i := id, spent_hours, spent_hours)
)
) as spent
from time cross join
(select @h := 0, @i := 0) params
order by id, ??;
注意:您需要一个额外的列来指定累积总和的顺序(由??
子句中的order by
表示。请记住,SQL表代表无序集,所以你需要一个列来明确表示排序。