Подтвердить что ты не робот

Как сделать SQL select top N... в AS400

Как вы выполняете

Select top N * from as400table

введите запрос к базе данных as400/db2

4b9b3361

Ответ 1

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.

Ответ 2

Строго, нет эквивалента 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 и работал.

Ответ 3

Я только подросток, когда речь заходит о IBM - я парень SQL Server. Но я обнаружил, что подход "рябины" (который я успешно использовал в Oracle) не работал в DB2. Я использовал этот:

SELECT
     MYFIELD 
FROM
     "SCHEMANAME"."TABLENAME" 
WHERE
     FILTERCOL1 = 000001 
     AND FILTERCOL2 = 1 
ORDER BY
     MYFIELD DESC FETCH FIRST ROW ONLY

(Я заказал нисходящий, потому что мне нужно последнее значение.)

Надеюсь, это поможет. Джои

Ответ 4

Не было бы проще ограничить результат? Пыль в порядке по дате, и я принимаю верхний результат

SELECT banana_equipment_id 
FROM new_banana_equipment 
WHERE banana_code=0000001
ORDER BY banana_date DESC 
LIMIT 1;