Autor Tópico: Limitar o Nr de linhas retornadas pelo Sql  (Lida 5876 vezes)

clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Limitar o Nr de linhas retornadas pelo Sql
« Online: Outubro 25, 2010, 07:33:38 am »
Olá,

Estou precisando criar um gráfico com os 20 melhores dias de vendas
Estou utilizando o banco de dados Postgres, coloquei o comando
LIMIT 20 no Sql da minha aplicação de consulta, mas o SC não está
respeitando este comando, não posso criar uma view para resolver
trazendo somente os 20 melhores, pois vou utilizar um where dinâmico
com vários parâmetros, alguém tem alguma sugestão ?


Sql que estou utilizando:

     SELECT SUM(fato_venda.valor) AS valor,
                SUM(fato_venda.quantidade) AS quantidade,
                fato_venda.data
       FROM fato_venda
INNER JOIN dim_data_venda
           ON dim_data_venda.data = fato_venda.data
  GROUP BY fato_venda.data
  ORDER BY valor DESC
   LIMIT 20



Obrigado a Todos,

Clifor Travaini.

leandroauler

  • Avançado
  • ****
  • Mensagens: 381
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #1 Online: Outubro 25, 2010, 09:17:37 am »
Clifortraviani,

Não faltou usar o OFFSET...

http://www.postgresql.org/docs/8.1/static/queries-limit.html


clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #2 Online: Outubro 25, 2010, 09:40:33 am »
Olá, coloquei o OFFSET e ele me retorna o seguinte erro,


ERRO
Erro ao acessar o banco de dados
ERRO: erro de sintaxe em ou próximo a "asc" at character 297
SELECT fato_venda.data as fato_venda_data, SUM(fato_venda.quantidade) as quantidade, SUM(fato_venda.valor) as valor from fato_venda INNER JOIN dim_data_venda ON dim_data_venda.data = fato_venda.data group by fato_venda.data order by fato_venda.data asc, valor DESC LIMIT 20 OFFSET 20 asc

O SC coloca este "asc" no final do comando e dá erro,

Alguma sugestão de como corrigir isso ?
Obrigado,

leandroauler

  • Avançado
  • ****
  • Mensagens: 381
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #3 Online: Outubro 25, 2010, 09:46:42 am »
Tente você colocar o ASC depois do OFFSET e ve se vai gerar o mesmo erro

clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #4 Online: Outubro 25, 2010, 10:28:19 am »
O ASC é parametro do ORDER BY,
se eu colocar o "asc" após o OFFSET da erro mesmo no banco.


Haroldo

  • Expert
  • *****
  • Mensagens: 6262
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #5 Online: Outubro 25, 2010, 10:40:43 am »
crie uma view para esse select e use a view na consulta.

clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #6 Online: Outubro 25, 2010, 11:00:41 am »
Olá, já fiz com a view e funciona, mas tenho um problema, nao posso usar uma view,
pois vou utilizar o sc_select_where com diversos parametros, ai nao consigo aplicar
este where dinamico na view.


Haroldo

  • Expert
  • *****
  • Mensagens: 6262
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #7 Online: Outubro 25, 2010, 11:04:51 am »
e criar uma store procedure com tabela temporaria?

Olá, já fiz com a view e funciona, mas tenho um problema, nao posso usar uma view,
pois vou utilizar o sc_select_where com diversos parametros, ai nao consigo aplicar
este where dinamico na view.



clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #8 Online: Outubro 25, 2010, 12:43:45 pm »
Vou tentar esta opção, vlw

clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #9 Online: Outubro 29, 2010, 07:28:00 pm »
Olá, Stored Procedure não tem como, o SC não reconhece Stored Procedure no POSTGRESQL (talvez pq no postgres seja uma function) e na aplicação de consulta não está aceitando,

alguém tem outra sugestão ??

Obrigado,


Clifor Travani.

Haroldo

  • Expert
  • *****
  • Mensagens: 6262
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #10 Online: Outubro 30, 2010, 08:38:21 am »
então crie uma tabela (não temporária) para guardar os registros processados e uma rotina php para alimentar essa tabela e crie a consulta em cima dela.

clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #11 Online: Outubro 30, 2010, 12:11:42 pm »
Olá Harold,
Fiz com uma tabela auxiliar, gravo os dados já agrupados como vou utilizar no relatório,
e fiz a consulta sobre esta tabela, até que funcionou, mas o desempenho ficou péssimo!

Más este vai ser o jeito até a netmake resolver o problema do "asc" no final do comando sql.

Obrigado pela ajuda,

Clifor Travaini.

Haroldo

  • Expert
  • *****
  • Mensagens: 6262
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #12 Online: Outubro 31, 2010, 10:53:28 am »
Criou essa tabela com que tipo de engine? crie em memória.
em vez de rotina PHP para alimentar pode criar uma stored procedure para alimentar a tabela.
Se mesmo assim não for satisfatório, o ideal seria construir o relatório na unha, com poucas dependências do SC.
Estou construindo um relatório complexo, onde cada coluna são selects diferentes, e o mesmo tem 4 sessões com conteúdo totalmente diferente, uso inicialmente uma consulta com uma tabela com um único campo e 4 registros, (valores 1,2, 3 e 4) e dentro da onrecord construo o corpo das sessões, apesar da complexidade até o momento a performance não esta deixando a desejar, uso MYSQL compilado na versão da Google.


Diogo Toscano

  • Administrator
  • Expert
  • *****
  • Mensagens: 590
    • :: ScriptCase ::
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #13 Online: Novembro 01, 2010, 10:05:07 am »
Na aplicação do ScriptCase desative a opção paginação, coloque a opção total, se não o ScriptCase vai tentar realizar a páginação e resolve seu problema original.

Mas a melhor solução é utilizar a view, mesmo que voce use where dinamico, voce pode trazer o where que voce quer como um campo no retorno da view e ai utilizar o where na view....

clifortravaini

  • Novato
  • *
  • Mensagens: 31
    • Email
Re: Limitar o Nr de linhas retornadas pelo Sql
« Responder #14 Online: Novembro 18, 2010, 03:39:09 pm »
Criei uma tabela auxiliar e resolveu o problema, ficou bom, mas ficaria melhor direto no sql do scriptcase. Abri um ticket e vou aguardar.

Obrigado a todos.


Clifor Travaini.