你如何表现
Select top N * from as400table
针对as400 / db2数据库的类型查询
答案 0 :(得分:46)
Select col1,col2
from
as400table
where col1='filter'
order by col1
fetch first N row only
请记住设置ORDER BY
子句,因为DB2不保证FETCH FIRST N ROW ONLY
返回的行始终是相同的N.
答案 1 :(得分:13)
严格来说,DB2中没有TOP N的等价物。
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
编译并运行,但
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
不会编译。
TOP N
和FETCH FIRST N
不一样。每个查询只能使用FETCH FIRST
,而{}可以在任何子选择中使用。
您可以在子查询中使用窗口函数来模拟TOP N
:
TOP N
这将返回99行。我在iSeries 7中尝试过它,但它确实有用。
答案 2 :(得分:0)
I am only a baby-geek when it comes to IBM--I am a SQL Server guy. But I found the rownumber approach (which I have used successfully in Oracle) did not work in DB2. I used this one:
SELECT
MYFIELD
FROM
"SCHEMANAME"."TABLENAME"
WHERE
FILTERCOL1 = 000001
AND FILTERCOL2 = 1
ORDER BY
MYFIELD DESC FETCH FIRST ROW ONLY
(I ordered descending because I needed the last value.)
Hope this helps. Joey
答案 3 :(得分:0)
不会更容易限制结果吗? 贝娄按日期排序,我取得了最佳成绩
SELECT banana_equipment_id
FROM new_banana_equipment
WHERE banana_code=0000001
ORDER BY banana_date DESC
LIMIT 1;
答案 4 :(得分:0)
这是一个老话题,以为我会贡献力量
考虑对前n个余额使用RANK()
OVER()
吗?
WITH RANK_TBL AS
(SELECT FIELD1 AS "ENDING BALANCE",
RANK() OVER(ORDER BY FIELD1 DESC) AS "RANK NUMBER"
FROM LIBRARY/TABLE)
SELECT *
FROM RANK_TBL
WHERE "RANK NUMBER" < 6
答案 5 :(得分:0)
我知道这是一个旧线程,但可能对我的回答有所帮助,限制AS400中的行数的最佳方法是仅使用FETCH FIRST 1000 ROWS 例: 从myschema.mytable_name中选择* 仅获取前1000行
这将使您返回前1000行。
当然,您可以将1000更改为所需的其他任何值,例如10、25、10000等。
至少这对我在AS400数据库中有效(29-06-2020)
最佳