Olá pessoal, nesta quick tip falaremos sobre as funções First e Skip do Firebird.

Aproveitando a oportunidade do trocadilho, vamos falar primeiro do first: esta função nos permite retornar apenas os N primeiros registros de uma consulta. Por exemplo, no seguinte select retornaremos todos os registros da tabela:

SELECT ID, PAPEL, PRECO_ENTRADA, STOP_GANHO FROM historico_operacao

O resultado é o seguinte:

função que permite retornar apenas os N primeiros registros

Até aqui, tudo normal, um select para trazer todos os registros. Porém, se desejarmos trazer apenas os cinco primeiros registros teríamos que usar o first para indicar isso. Dessa forma, nossa consulta ficaria assim:

SELECT FIRST 5 ID, PAPEL, PRECO_ENTRADA, STOP_GANHO FROM historico_operacao

E teríamos consequentemente o seguinte resultado:

uso do first

Como podem ver é bem simples usar o first. Muita gente, intuitivamente, após usar o first tenta usar o “last” para pegar os N últimos registros de uma consulta, porém o “last” não existe. Para pegar os N últimos registros de uma consulta temos que combinar o first com o order by. Dessa forma, para pegarmos os últimos cinco registros de uma consulta teríamos o seguinte select com o seguinte resultado:

SELECT FIRST 5 ID, PAPEL, PRECO_ENTRADA, STOP_GANHO FROM historico_operacao
ORDER BY ID DESC
order by desc

Como podemos observar, conseguimos com order by desc simular um comando last, pegando os N últimos registros de uma consulta.

Como podemos ver até aqui, conseguimos pegar do primeiro registro até o quinto, do décimo segundo até o último, mas e se quisermos pegar do sexto ao décimo segundo, como fazemos?

Vamos utilizar o skip, que em uma tradução livre significa “pular” ou “saltar”, e é exatamente isso que ele faz. Ele nos permite “pular” N registros para depois pegar os N primeiros, como mostra o exemplo abaixo:

SELECT FIRST 7 skip 5 ID, PAPEL, PRECO_ENTRADA, STOP_GANHO FROM historico_operacao
uso do skip

No exemplo podemos observar que conseguimos atingir nosso objetivo: pegar do registro 6 ao 12, ou seja, deixando de fora da consulta os registros 1 ao 5 e 13 ao 16. O Firebird pulou os primeiros cinco registros da consulta, e pegou os sete primeiros a partir do sexto registro -com isso, obtivemos o resultado observado.

Eu uso essas duas funções constantemente: o skip por exemplo é extremamente interessante quando se precisa extrair dados por partes, ou dividir uma consulta para processamento em paralelo por exemplo.