Sql t是这样的:获取行:1-1002000-21004000-41008000-810016000-16100、32000-32100等等。@Raj针对您的范围进行了更新-它们不会呈指数增长,因为第一个和第二个范围都是2000行,所以您需要为第一组做一个特例。
Sql t是这样的:获取行:1-1002000-21004000-41008000-810016000-16100、32000-32100等等。@Raj针对您的范围进行了更新-它们不会呈指数增长,因为第一个和第二个范围都是2000行,所以您需要为第一组做一个特例。,sql,oracle,Sql,Oracle,t是这样的:获取行:1-1002000-21004000-41008000-810016000-16100、32000-32100等等。@Raj针对您的范围进行了更新-它们不会呈指数增长,因为第一个和第二个范围都是2000行,所以您需要为第一组做一个特例。谢谢。你的回答多少解决了我的问题。我正试图修改查询以符合我的确切要求,如下所示:获取行:1-1002000-21004000-41008000-810016000-16100、32000-32100等等。@Raj针对您的范围进行了更新-它们不会
t是这样的:获取行:1-1002000-21004000-41008000-810016000-16100、32000-32100等等。@Raj针对您的范围进行了更新-它们不会呈指数增长,因为第一个和第二个范围都是2000行,所以您需要为第一组做一个特例。谢谢。你的回答多少解决了我的问题。我正试图修改查询以符合我的确切要求,如下所示:获取行:1-1002000-21004000-41008000-810016000-16100、32000-32100等等。@Raj针对您的范围进行了更新-它们不会呈指数增长,因为第一个和第二个范围都是2000行,所以您需要为第一组设置一个特例。
SELECT * FROM (SELECT t.*,ROWNUM AS rn FROM(SELECT * FROM your_table ORDER BY your_condition) t)WHERE MOD( rn - 1, 2000 ) < 100;
select t.*
from (select t.*,
row_number() over (floor(log(2, floor(1 + (seqnum - 1) / 1000) ))
order by col
) as seqnum_2
from (select t.*, row_number() over (order by col) as seqnum
from t
) t
where seqnum_2 <= 100;
with rng as (select 0 num from dual union all
select 1000 * power(2, level) from dual connect by level < 10 )
select *
from (select row_number() over (order by object_name) rn, object_name from all_objects)
join rng on rn between num + 1 and num + 100
SELECT *
FROM (
SELECT t.*,
ROWNUM AS rn -- Secondly, assign a row number to the ordered rows
FROM (
SELECT *
FROM your_table
ORDER BY your_condition -- First, order the data
) t
)
WHERE rn - POWER( -- Finally, filter the top 100.
2,
TRUNC( CAST( LOG( 2, CEIL( rn / 1000 ) ) AS NUMBER(20,4) ) )
) * 1000 + 1000 <= 100
WHERE CASE -- Finally, filter the top 100.
WHEN rn <= 2000 THEN rn
ELSE rn - POWER(
2,
TRUNC( CAST( LOG( 2, CEIL( rn / 1000 - 1 ) ) AS NUMBER(20,4) ) )
) * 1000
END <= 100