elc*_*ool 89 db2 limit ibm-midrange
你如何LIMIT
在DB2 for iSeries中做到这一点?
我有一个超过50,000条记录的表,我想将记录0到10,000,并记录10,000到20,000.
我在SQL中知道你LIMIT 0,10000
在查询结束时写入0到10,000,LIMIT 10000,10000
在查询结束时写入 10000到20,000
那么,这在DB2中是如何完成的?什么是代码和语法?(完整的查询示例表示赞赏)
Joe*_*Joe 138
使用FETCH FIRST [n] ROWS ONLY
:
SELECT LASTNAME, FIRSTNAME, EMPNO, SALARY
FROM EMP
ORDER BY SALARY DESC
FETCH FIRST 20 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
要获得范围,你必须使用ROW_NUMBER()
(从v5r4开始)并在WHERE
条款中使用:(从这里偷来:http://www.justskins.com/forums/db2-select-how-to-123209.html )
SELECT code, name, address
FROM (
SELECT row_number() OVER ( ORDER BY code ) AS rid, code, name, address
FROM contacts
WHERE name LIKE '%Bob%'
) AS t
WHERE t.rid BETWEEN 20 AND 25;
Run Code Online (Sandbox Code Playgroud)
elc*_*ool 13
开发此方法:
您需要一个具有可订购的唯一值的表.
如果您想要行10,000到25,000并且您的表有40,000行,首先需要获取起点和总行数:
int start = 40000 - 10000;
int total = 25000 - 10000;
然后通过代码将这些传递给查询:
SELECT * FROM
(SELECT * FROM schema.mytable
ORDER BY userId DESC fetch first {start} rows only ) AS mini
ORDER BY mini.userId ASC fetch first {total} rows only
Run Code Online (Sandbox Code Playgroud)
这是我提出的解决方案:
select FIELD from TABLE where FIELD > LASTVAL order by FIELD fetch first N rows only;
Run Code Online (Sandbox Code Playgroud)
通过将LASTVAL初始化为0(或"对于文本字段"),然后将其设置为最新记录集中的最后一个值,这将在N个记录的块中逐步执行该表.
归档时间: |
|
查看次数: |
128399 次 |
最近记录: |