Esta semana eu precisei fazer um gráfico dos 10 produtos mais vendidos de uma empresa. Utilizei a expressão Limit na Sql para limitar apenas a quantidade de registros (10 registros) que eu estava precisando e estava dando erro. Depois de algum tempo de pesquisa, entendi o erro.
A expressão Limit que eu utilizava em PostgreSQL é incompatível com o Firebird. No Firebird temos que utilizar a expressão First, Exemplo:
SELECT FIRST 10 cup_item.produto, cup_item.descricao, SUM(cup_item.qtde) as Quantidade,cup_item.unitario,
SUM(cup_item.total), grupo.descricao as Desc_gru
FROM produto, cup_venda, cup_item, grupo
WHERE produto.codigo=cup_item.produto
AND cup_item.id_venda=cup_venda.id_venda
AND produto.grupo=grupo.codigo
AND cup_venda.data >= :dInicio
AND cup_venda.data <= :dFinal
GROUP BY cup_item.produto, cup_item.descricao, Desc_gru, cup_item.unitario
ORDER BY quantidade desc
Exemplo em PostgreSQL com o comando Limit:
SELECT cup_item.produto, cup_item.descricao, SUM(cup_item.qtde) as Quantidade,cup_item.unitario,
SUM(cup_item.total), grupo.descricao as Desc_gru
FROM produto, cup_venda, cup_item, grupo
WHERE produto.codigo=cup_item.produto
AND cup_item.id_venda=cup_venda.id_venda
AND produto.grupo=grupo.codigo
AND cup_venda.data >= :dInicio
AND cup_venda.data <= :dFinal
GROUP BY cup_item.produto, cup_item.descricao, Desc_gru, cup_item.unitario
ORDER BY quantidade desc
LIMIT 10
Então se na nossa tabela existir milhares de registros, não importa, pois só serão exibidos os 10 registros determinados pelo comando Limit ou First.