как выбрать из таблицы, пока общее число не будет определенным? - PullRequest
1 голос
/ 13 января 2012

У меня есть такая таблица:

"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'

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

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Попробуйте этот запрос -

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 |
+------+---------+---------+
3 голосов
/ 13 января 2012

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

"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

Вы можете сделать это, не добавляя этот дополнительный столбец, но вы будете усложнять задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...