我有一个看起来像这样的表:
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
...
答案 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;