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.