Luiz Fernando Posted June 11, 2015 Report Share Posted June 11, 2015 Colegas veja este situação data da emissão valor 28/11/2014 484,18 10/12/2014 2.354,57 06/01/2015 635,78 16/01/2015 710,00 estou usando este SELECT abaixo cSql="SELECT v.cliente,max(v.data) as maiordata,count(*),v.total" cSql+=" FROM vendas as v" cSql+=" GROUP BY v.cliente" cSql+=" HAVING maiordata < "+any2sql(minha_variavel) cSql+=" ORDER BY v.cliente,v.sql_rowid desc" eu preciso exibir apenas a ultima venda, e extrair a data e o valor desta venda, como o comando MAX consigo trazer a data 16/01/2015,mais de todos teste que faço aqui não consigo trazer o valor 710,00, sempre vem o 484,18, tentei ordenar pelo campo ID mesmo assim não deu certo, alguém teria alguma dica. Obrigado Ronaldbuch 1 Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted June 11, 2015 Report Share Posted June 11, 2015 Luiz algo assim não funcionaria? SELECT res.cliente, res.maiordata, res.valorFROm(SELECT v.cliente, max(v.data) AS maiordata, v.valor, v.sql_rowidFROM vendas vGROUP BY v.clienteHAVING maiordata < (sua_variavel) ) resORDER BY res.cliente, res.sql_rowid desc ; Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 11, 2015 Author Report Share Posted June 11, 2015 Geraldo vlw mais uma vez pela ajuda, acabei fazendo dois select e unificando eles, colega tive problemas de performa aqui muito grande usando subselect, em alguns casos ate uso sim qdo não envolve tabela com muitos registros. Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
kleyber Posted June 12, 2015 Report Share Posted June 12, 2015 Luiz Fernando, Como fizeste estes selects unidos? Isso pode gerar probemas de performance mais na frente também. Quote Link to comment Share on other sites More sharing options...
Eroni Posted June 15, 2015 Report Share Posted June 15, 2015 Bom dia, se não resolveu ainda, recomendo nao usar o max,, mas sim combinar um SUM com um order by data DESC e com clausula LIMIT 1, desta forma a perfomance será boa. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 15, 2015 Author Report Share Posted June 15, 2015 Ola Eroni obrigado pela resposta, acabei mudando o relatorio para pegar o maior valor de compra,e total de compra, pois o cliente assim quiz, mais vou testar da sua forma acima Kleyber, neste caso acabou ficando mesmo num unico select mais qdo em alguns casos pela lentidão faço os dois select conforme o exemplo abaixo 1) SELECT pedido,valor,'' aSql_a:=SqlArray(cSql) 2) SELECT pedido,campo_teste aSql_b:=SqlArray(cSql) for i=1 to len(aSql_ nPos := ASCAN( aSql_a, {|x| x[1] == aSql_b[i,1] } ) if nPos>0 aSql_a[nPos,3]:=aSql_b[i,3] endif next Obrigado Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.