Как вы выполняете
Select top N * from as400table
введите запрос к базе данных as400/db2
Как вы выполняете
Select top N * from as400table
введите запрос к базе данных as400/db2
Select col1,col2
from
as400table
where col1='filter'
order by col1
fetch first N row only
Не забудьте установить предложение ORDER BY
, поскольку DB2 не гарантирует, что строки, возвращаемые FETCH FIRST N ROW ONLY
, всегда равны N.
Строго, нет эквивалента TOP N в DB2.
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
компилируется и запускается, но
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
не будет компилироваться.
TOP N
и FETCH FIRST N
не совпадают. Вы можете использовать FETCH FIRST
один раз за запрос, тогда как TOP N
можно использовать в любом подвыборе.
Вы можете использовать функцию окна в подзапросе, чтобы имитировать 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
Это вернет ровно 99 строк. Я пробовал это в iSeries 7 и работал.
Я только подросток, когда речь заходит о IBM - я парень SQL Server. Но я обнаружил, что подход "рябины" (который я успешно использовал в Oracle) не работал в DB2. Я использовал этот:
SELECT
MYFIELD
FROM
"SCHEMANAME"."TABLENAME"
WHERE
FILTERCOL1 = 000001
AND FILTERCOL2 = 1
ORDER BY
MYFIELD DESC FETCH FIRST ROW ONLY
(Я заказал нисходящий, потому что мне нужно последнее значение.)
Надеюсь, это поможет. Джои
Не было бы проще ограничить результат? Пыль в порядке по дате, и я принимаю верхний результат
SELECT banana_equipment_id
FROM new_banana_equipment
WHERE banana_code=0000001
ORDER BY banana_date DESC
LIMIT 1;