查询以对列求和,直到获得定义的值

时间:2014-05-09 18:02:00

标签: mysql

我已经为此尝试了一些其他主题,但无法获得满足我要求的答案,因此发布了一个新问题。对不起,这个。

我正在尝试查询mysql以获取'sum'数据,直到达到定义的值。像

从我的表'购买',对于从最后一行开始的每个'sid',我需要'pqty'的总和,直到结果等于来自字符串的值(但是尝试我已经给出了某个值)。 让我用我表中的行来定义--- '购买'中'sid = 1'的行是这样的---

       date      pqty    prate    pamt
    2014/04/29    5     38000    190000
    2014/05/04    1     38000    38000
    2014/05/13   20     35000    700000
    2014/05/19    1     38000    38000

从这一行开始,从最后一行开始,我希望'sum(pqty)直到达到19(现在)。它是通过添加最后2行(19)来实现的。并在这里停止总和并返回'pqty','prate'和'pamt'的价值或总和。为了达到这个目的,我根据在这个论坛上发现的例子尝试了以下内容。

SELECT date, pqty, @total := @total + pqty AS total
    FROM (purchase, (select @total :=0) t)
    WHERE @total<19 AND sid = $sid ORDER BY date DESC

但它不适合我。请指导我完成这个。如果这不是我的目的的好技术,也会提出别的建议。

提前谢谢.....

1 个答案:

答案 0 :(得分:0)

不是100%肯定,但我认为这两项都有效......

 SELECT x.*, SUM(y.pqty) FROM purchase x
   JOIN purchase y
     ON y.date >= x.date
  GROUP
     BY x.date
 HAVING 19 BETWEEN SUM(y.pqty)-x.pqty AND SUM(y.pqty)
     OR 19 >= SUM(y.pqty);


 SELECT a.*
   FROM 
      ( SELECT x.*, @i := @i+pqty i
          FROM purchase x
             , (SELECT @i:= 0) var
         ORDER 
            BY x.date DESC
      ) a
  WHERE 19 BETWEEN a.i-a.pqty AND a.i
     OR 19 >= a.i;