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

要回复问题请先登录注册