2012-01-13 1 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 или меньше, так что пометить его как остальные ??? –

+0

Откуда взялись столбцы 'request'? – diEcho

+0

запрос - это поле, в котором я должен появиться в запросе –

ответ

3

Вы можете сделать это проще для себя, добавив дополнительную колонку, содержащую сумму сумм с более низким идентификатором.

"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 | 
+------+---------+---------+ 
Смежные вопросы