У меня есть огромный стол:
+------+---------+-----+-----+-------+------+---------+ | Тикер | 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
Используйте переменные:
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;
Примечание: вам нужно заказать что-то в подзапросе. Я не уверен, что правильный столбец. Мое лучшее предположение — столбец даты.
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;