用列值替换LIMIT静态值

时间:2017-10-30 14:55:37

标签: mysql sql limit

我有一个看起来像这样的表:

ID     Damage
1      10
2      7
3      153587
4      1
...1M more rows

我有另一个表格,其中有一列代表我需要抓取的行数百分位数,所以如果它的前10个百分位数列值将是100000我想根据损坏抓取。

是否有办法而不是说LIMIT 100000,因为百分位变化以基本上变量或列值替换100000?

第二张表:

Days    Percentile_Affected    Damage_Sum
14      87000
30      161000
90      371000
...

1 个答案:

答案 0 :(得分:1)

如果ID没有间隙,您可以使用id。相反,您可以添加计数变量并使用:

select t.*
from (select t.*, (@rn := @rn + 1) as rn
      from (select t.*
            from t
            order by id
           ) t cross join
           (select @rn := 0) params
     ) t
where rn < (select "a column" from "another table");

另一种方法是构造查询并使用动态SQL:

select @sql := replace('select t.* from t limit [limit]', [limit], "a column")
from "another table";

prepare stmt from @sql;
execute stmt;

或者,使用占位符作为限制:

set @sql = 'select t.* from t limit ?';
select @limit := "a column"
from "another table";

prepare stmt from @sql;
execute stmt using @limit;