2012-01-13 45 views
1

我有这样一个表:如何从表中选择直到总数是一个特定的数字?

"ID" "oamount" 
'1'  '1500' 
'2'  '2000' 
'3'  '2000' 
'4'  '1000' 

,并有3000单买入 ,所以我需要选择这样的”

"ID" "oamount" "request" 
'1'  '1500'  '1500' 
'2'  '2000'  '1500' 

一个查询,如果订单的金额4000然后

"ID" "oamount" "request" 
'1'  '1500'  '1500' 
'2'  '2000'  '2000' 
'3'  '2000'  '500' 

所以我需要选择所有的行,直到金额完成,但最后一行将代表金额的其余部分。

+1

你怎么能告诉量完成即你怎么知道没有任何剩余的标识与金额500以下,以便将其标记为剩余??? – 2012-01-13 07:28:24

+0

哪里来自'request'列? – diEcho 2012-01-13 07:29:32

+0

请求是我需要在查询中出现的字段 – 2012-01-13 08:03:23

回答

3

您可以通过添加一个额外的列来让自己更容易,其中包含具有较低ID的金额总和。

"ID" "oamount" "mamount" 
'1' '1500' '0' 
'2' '2000' '1500' 
'3' '2000' '3500' 
'4' '1000' '5500' 

然后,您可以根据新的列选择:

SELECT `ID`, 
    CASE WHEN `oamount` < @Amount - `mamount` 
     THEN `oamount` 
     ELSE @Amount - `mamount` END AS `amount` 
FROM `yourtable` 
WHERE `mamount` < @Amount 

可以做没有增加这一额外的列,但你会被不必要的困难使事情。

3

尝试此查询 -

SET @req = 4000; 
SET @sum = 0; 
SELECT id, oamount, IF(s > @req, oamount - (s - @req), oamount) request FROM (
    SELECT id, oamount, @sum := @sum + oamount s FROM amounts ORDER BY id) t 
WHERE s - oamount < @req; 

+------+---------+---------+ 
| id | oamount | request | 
+------+---------+---------+ 
| 1 | 1500 | 1500 | 
| 2 | 2000 | 2000 | 
| 3 | 2000 |  500 | 
+------+---------+---------+ 
相关问题