如何做SQL在AS400中选择前N ...

时间:2010-05-17 15:32:55

标签: sql ibm-midrange

你如何表现

Select top N * from as400table

针对as400 / db2数据库的类型查询

6 个答案:

答案 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 NFETCH 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)

最佳