微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql中更复杂的累积总和列

如何解决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 举报,一经查实,本站将立刻删除。