Comment effectuez-vous un
Select top N * from as400table
tapez une requête sur une base de données as400/db2
Select col1,col2
from
as400table
where col1='filter'
order by col1
fetch first N row only
N'oubliez pas de définir un ORDER BY
clause, car DB2 ne garantit pas que les lignes renvoyées par FETCH FIRST N ROW ONLY
sont toujours les mêmes N.
Strictement, il n'y a pas d'équivalent de TOP N dans DB2.
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
compile et exécute, mais
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
ne compilera pas.
TOP N
et FETCH FIRST N
ne sont pas les mêmes. Vous ne pouvez utiliser que FETCH FIRST
ne fois par requête, tandis que TOP N
peut être utilisé dans n'importe quelle sous-sélection.
Vous pouvez utiliser une fonction de fenêtre dans une sous-requête afin de simuler 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
Cela renverra exactement 99 lignes. J'ai essayé cela dans iSeries 7 et cela a fonctionné.
Je ne suis qu'un bébé-geek en ce qui concerne IBM - je suis un gars de SQL Server. Mais j'ai trouvé que l'approche du nombre réel (que j'ai utilisée avec succès dans Oracle) ne fonctionnait pas dans DB2. J'ai utilisé celui-ci:
SELECT
MYFIELD
FROM
"SCHEMANAME"."TABLENAME"
WHERE
FILTERCOL1 = 000001
AND FILTERCOL2 = 1
ORDER BY
MYFIELD DESC FETCH FIRST ROW ONLY
(J'ai ordonné décroissant parce que j'avais besoin de la dernière valeur.)
J'espère que cela t'aides. Joey
Ne serait-il pas plus facile de limiter le résultat à la place? Le soufflet est en ordre par date et je prends le meilleur résultat
SELECT banana_equipment_id
FROM new_banana_equipment
WHERE banana_code=0000001
ORDER BY banana_date DESC
LIMIT 1;