¿Cómo se realiza un tipo de consultaCómo hacer SQL seleccione subir N ... en AS400
Select top N * from as400table
contra una base de datos AS400/DB2
¿Cómo se realiza un tipo de consultaCómo hacer SQL seleccione subir N ... en AS400
Select top N * from as400table
contra una base de datos AS400/DB2
Select col1,col2
from
as400table
where col1='filter'
order by col1
fetch first N row only
Recuerde que debe establecer una cláusula de ORDER BY
, porque DB2 no garantiza que las filas devueltas por FETCH FIRST N ROW ONLY
sean siempre las mismas N.
Estrictamente, no hay un equivalente de TOP N en DB2.
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
compila y ejecuta, pero
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
no se compilará.
y FETCH FIRST N
no son lo mismo. Solo puede usar FETCH FIRST
una vez por consulta, mientras que TOP N
se puede usar en cualquier sub-selección.
Se puede utilizar una función de ventana en una sub-consulta con el fin de 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 geek bebé cuando se trata de IBM - Soy un tipo de SQL Server. Pero encontré que el enfoque Rownumber (que he utilizado con éxito en Oracle) no funcionó en DB2. Solía éste:
SELECT
MYFIELD
FROM
"SCHEMANAME"."TABLENAME"
WHERE
FILTERCOL1 = 000001
AND FILTERCOL2 = 1
ORDER BY
MYFIELD DESC FETCH FIRST ROW ONLY
(. Me ordenaron descender porque necesitaba el último valor) Esperanza
esto ayuda. Joey
¿No sería más fácil limitar el resultado en su lugar? El fuelle está en orden por fecha y tomo el resultado principal
SELECT banana_equipment_id
FROM new_banana_equipment
WHERE banana_code=0000001
ORDER BY banana_date DESC
LIMIT 1;
** LIMIT n ** se puede usar en DB2 para i 7.1 y posterior, pero debe tenerse en cuenta que es solo una sintaxis alternativa para _fetch-first-clause_. El mismo comportamiento ocurre con ** LIMIT 1 ** como con ** FETCH 1 SOLAMENTE **. – user2338816
Fabulous! Esta debería ser la respuesta correcta. :-) FETCH FIRST N ROWS SOLAMENTE es útil, pero no semánticamente equivalente al 100%. Bravo. –