top only first as400 sql ibm-midrange

only - Cómo hacer SQL seleccionar top N... en AS400



select top db2 (4)

¿Cómo se realiza un

Select top N * from as400table

tipo de consulta contra una base de datos as400 / db2


¿No sería más fácil limitar el resultado? Bellow está en orden por fecha y tomo el primer resultado

SELECT banana_equipment_id FROM new_banana_equipment WHERE banana_code=0000001 ORDER BY banana_date DESC LIMIT 1;


Estrictamente, no hay equivalente de TOP N en DB2.

SELECT 1 FROM sysibm.sysdummy1 WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1) FETCH FIRST ROW ONLY

compila y corre, pero

SELECT 1 FROM sysibm.sysdummy1 WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)

no compilará

TOP N y FETCH FIRST N no son lo mismo. Solo puede usar FETCH FIRST una vez por consulta , mientras que TOP N puede usarse en cualquier subselección .

Puede usar una función de ventana en una subconsulta para simular TOP N :

select * from ( select id, row_number() over (order by id) as rn from testsch.testtbl ) as r where r.rn < 100 -- This is N rows you are looking for

Esto devolverá exactamente 99 filas. Lo intenté en iSeries 7 y funcionó.


Solo soy un bebe-geek cuando se trata de IBM, soy un chico de SQL Server. Pero encontré que el enfoque de rownumber (que he utilizado con éxito en Oracle) no funcionó en DB2. Utilicé este:

SELECT MYFIELD FROM "SCHEMANAME"."TABLENAME" WHERE FILTERCOL1 = 000001 AND FILTERCOL2 = 1 ORDER BY MYFIELD DESC FETCH FIRST ROW ONLY

(Ordené descendente porque necesitaba el último valor.)

Espero que esto ayude. Joey


Select col1,col2 from as400table where col1=''filter'' order by col1 fetch first N row only

Recuerde establecer una cláusula ORDER BY , porque DB2 no garantiza que las filas devueltas por FETCH FIRST N ROW ONLY iguales.