Как я могу выбрать только несколько строк в следующей таблице, чтобы они суммировались до определенного значения?
Table
-----
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
2 | 1.5 | 0.0 | 7.5 | 18
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
Скажем, максимальное значение, которое я хочу, составляет 57 ...
Так что мне нужно для выбора строк из предыдущей таблицы таким образом, чтобы qty1 + qty2 + qty3 + qty4 каждой строки, получить до этого значения 57 и отбросить другие строки. В этом примере я бы получил следующее:
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
2 | 1.5 | 0.0 | 7.5 | 18
Поскольку 10 + 20 + 1,5 + 7,5 + 18 = 57, поэтому я отбрасываю строки 3 и 4 ...
Теперь я хочу, чтобы верхнее значение было 50, тогда Я должен получить:
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
2 | 1.5 | 0.0 | 7.5 | 11
Так как эти значения составляют в сумме 50, а 7 из row2, qty4 не учитывается ... (Кстати, строки упорядочены таким образом, потому что это порядок, в котором я хочу учитывать суммы qtys ... Неверно суммировать сначала строку1, затем 3, затем 2, затем 4, например ... Их всегда следует суммировать в порядке 1,2,3,4 ...)
Что, если я хочу дополнить это? Я имею в виду, что две другие строки я не получил в последнем результате.
Первый случай:
id | qty1 | qty2 | qty3 | qty4
------------------------------
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
Второй случай:
id | qty1 | qty2 | qty3 | qty4
------------------------------
2 | 0.0 | 0.0 | 0.0 | 7
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
(Если второй случай слишком сложен, как насчет получения:
id | qty1 | qty2 | qty3 | qty4
------------------------------
1 | 0.0 | 0.0 | 10 | 20
Поскольку сложение исходных количеств строки 2 превысит значение 50, я отбрасываю его. .. Дополнение в этом случае должно быть просто:
id | qty1 | qty2 | qty3 | qty4
------------------------------
2 | 1.5 | 0.0 | 7.5 | 18
3 | 1.0 | 2.0 | 7.5 | 18
4 | 0.0 | 0.5 | 5 | 13
)