MySQL: выберите LAST N строк, а SUM меньше, чем Number

У меня есть огромный стол:

+------+---------+-----+-----+-------+------+---------+
| Тикер | data_date | цена | подсчитывать | oper_id | ext_nr | oper_summ |
+ ------ + --------- + ----- + ----- + ------- + ------ + ----- ---- +
| SBER | 2015-08 .. | 70,00 | 15 | 0 | 251528 | 1050.00 |
| AFLT | 2015-08 .. | 30.00 | 5 | 0 | 251525 | 150.00 |
| SBER | 2015-08 .. | 69,00 | 10 | 1 | 251521 | 690,00 |
| SBER | 2015-08 .. | 71,00 | 15 | 1 | 251513 | 1065.00 |
| SBER | 2015-08 .. | 72.00 | 15 | 0 | 251512 | 1080.00 |

Формат data_date: 2015-01-05 09:59:59
УНИКАЛЬНЫЙ КЛЮЧ `idx_ticker_ext_nr` (` ticker`, `ext_nr`)

Мне нужно выбрать последние N строк, где сумма (oper_summ) будет меньше, чем 10000

Я нашел похожую тему: ограничение количества строк, где сумма столбца равна определенному значению в MySQL

SELECT
O.ext_nr,
O.price,   O.count,
O.oper_summ,
(SELECT
sum(oper_summ) FROM Table1
WHERE ext_nr <= O.ext_nr) 'RunningTotal'
FROM Table1 O
HAVING RunningTotal <= 10000

но не могу заставить его работать в моих кодировках …

Нашел решение:

SET @msum := 0;
select t1.* from
(select m.*,
(@msum := @msum + m.oper_summ) as cumul_oper_summ from jos_fintools_data m order by m.data_date DESC )
t1 where t1.cumul_oper_summ <= 10000;

кредиты идут на слишком много направлений: ограничение количества строк, где сумма столбца равна определенному значению в MySQL

0

Решение

Используйте переменные:

SELECT o.*
FROM (SELECT O.ext_nr, O.price, O.count, O.oper_summ,
(@os := @os + oper_summ) as RunningTotal
FROM Table1 O CROSS JOIN
(SELECT @os := 0) params
ORDER BY data_date desc
) o
HAVING RunningTotal <= 10000;

Примечание: вам нужно заказать что-то в подзапросе. Я не уверен, что правильный столбец. Мое лучшее предположение — столбец даты.

0

Другие решения

SET @msum := 0;
select t1.* from
(select m.*,
(@msum := @msum + m.oper_summ) as cumul_oper_summ from jos_fintools_data m order by m.data_date DESC )
t1 where t1.cumul_oper_summ <= 10000;
0

По вопросам рекламы [email protected]