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,Exemplo em PostgreSQL com o comando Limit:
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
SELECT cup_item.produto, cup_item.descricao, SUM(cup_item.qtde) as Quantidade,cup_item.unitario,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.
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
