如何解决mysql中更复杂的累积总和列
| 我读了《在MysqL中创建累积和列》,并尝试使其适应我的工作,但我似乎无法正确地做到这一点。 桌子:Id (primary key)
AcctId
CommodId
Date
PnL
有一个唯一索引,其中包含AcctId,CommodId,Date。我想获得按日期分组的累计总数。
这个查询
select c.date,c.pnl,(@cum := @cum + c.pnl) as \"cum_pnl\"
from commoddata c join (select @cum := 0) r
where
c.acctid = 2
and
c.date >= \"2011-01-01\"
and
c.date <= \"2011-01-31\"
order by c.date
将正确计算所有记录的运行总计,以以下格式显示数据
date pnl cum_pnl
======== ====== =======
2011-01-01 1 1
2011-01-01 1 2
2011-01-01 1 3
2011-01-01 1 4
2011-01-02 1 5
2011-01-02 1 6
...
(每个日期可以有很多记录)。我想要的是
date cum_pnl
======== =======
2011-01-01 4
2011-01-02 6
...
但是我没有尝试过。 TIA。解决方法
或者,我认为您可以将所有的
pnl
替换为sum(pnl)
,并让您的@cum碰到那些。我认为它看起来像这样:
select c.date,SUM(c.pnl),(@cum := @cum + SUM(c.pnl)) as \"cum_pnl\"
from commoddata c join (select @cum := 0) r
where
c.acctid = 2 and c.date >= \"2011-01-01\" and c.date <= \"2011-01-31\"
order by c.date
GROUP BY c.date
我只是想弄清楚,当cum_pnl不是按表达式分组时,如果选择cum_pnl,SQL是否会让您感到悲伤……也许您也可以尝试按它分组?
编辑新思路,如果您真的不喜欢嵌套查询,请用汇总的分组查询替换ѭ7
select c.date,c.pnl,(@cum := @cum + c.pnl) as \"cum_pnl\"
from
(SELECT date,sum(pnl) as pnl FROM commoddata WHERE [conditions] GROUP BY date) c
join (select @cum := 0) r
order by c.date
,可能不是最好的方法,但您可以SELECT Date,MAX(Cum_PnL) FROM (existing_query_here) GROUP BY Date
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。