MySQL: Select LAST N rows while SUM less Then number

MySQL: Select LAST N rows while SUM less Then number

我有一个巨大的table:

+------+---------+-----+-----+-------+------+---------+
|ticker|data_date|price|count|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 format: 2015-01-05 09:59:59
  UNIQUE KEY `idx_ticker_ext_nr` (`ticker`,`ext_nr`)

我需要 SELECT 最后 N 行 WHERE SUM(oper_summ) 将小于 10000

我找到了类似的主题:limiting the rows to where the sum a column equals a certain value in 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;

积分太多重定向:limiting the rows to where the sum a column equals a certain value in 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;