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;
我有一个巨大的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;