Wie führen Sie einevorgehen SQL wählen Sie oben N ... in AS400
Select top N * from as400table
Typen Abfrage für eine AS400/DB2-Datenbank
Wie führen Sie einevorgehen SQL wählen Sie oben N ... in AS400
Select top N * from as400table
Typen Abfrage für eine AS400/DB2-Datenbank
Select col1,col2
from
as400table
where col1='filter'
order by col1
fetch first N row only
Denken Sie daran, eine ORDER BY
Klausel festlegen, weil DB2 garantiert nicht, dass die Zeilen, die von FETCH FIRST N ROW ONLY
zurückgegeben werden, immer gleich N sind.
Genau genommen gibt es kein Äquivalent von TOP N in DB2.
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
kompiliert und ausgeführt, aber
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
kompilieren nicht.
TOP N
und FETCH FIRST N
sind nicht gleich. Sie können FETCH FIRST
nur einmal pro Abfrage verwenden, wobei in einem beliebigen Sub-select verwendet werden kann.
Sie können eine Fensterfunktion in einer Unterabfrage, um TOP N
zu simulieren verwenden:
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
Dies wird genau 99 Zeilen zurück. Ich habe das in iSeries 7 ausprobiert und es hat funktioniert.
Ich bin nur ein Baby-Aussenseiter, wenn es um IBM geht - ich bin ein SQL Server-Typ. Aber ich fand, dass der Ansatz der Zeilennummerierung (den ich erfolgreich in Oracle verwendet habe) in DB2 nicht funktioniert hat. Ich habe diese ein:
SELECT
MYFIELD
FROM
"SCHEMANAME"."TABLENAME"
WHERE
FILTERCOL1 = 000001
AND FILTERCOL2 = 1
ORDER BY
MYFIELD DESC FETCH FIRST ROW ONLY
(. Ich absteigend geordnet, weil ich den letzten Wert erforderlich)
Hoffnung, das hilft. Joey
Wäre es nicht einfacher, das Ergebnis stattdessen zu begrenzen? Bellow ist in Ordnung nach Datum und ich nehme das beste Ergebnis
SELECT banana_equipment_id
FROM new_banana_equipment
WHERE banana_code=0000001
ORDER BY banana_date DESC
LIMIT 1;
** LIMIT n ** kann in DB2 für i 7.1 und höher verwendet werden, aber es sollte beachtet werden, dass es sich nur um eine alternative Syntax für eine _fetch-first-Klausel_ handelt. Das gleiche Verhalten passiert mit ** LIMIT 1 ** wie bei ** FETCH 1 ONLY **. – user2338816
Fabulous! Dies sollte die richtige Antwort sein. :-) FETCH FIRST N ROWS ONLY ist nützlich, aber nicht semantisch 100% äquivalent. Bravo. –