The Queen 0 Denunciar post Postado Setembro 9, 2008 Gostaria de saber se tem como fazer o seguinte: Tenho um Select (Select contrato, parcela, valor from parcela where dt_rcb >= '01-may-2008' and dt_rcb <= '31-may-2008') que retorna algo parecido com: a456852 --- 45 --- 78.23 a456852 --- 44 --- 78.23 a456852 --- 46 --- 78.23 a456852 --- 48 --- 78.23 a456852 --- 36 --- 78.23 a456852 --- 21 --- 78.23 b875556 --- 58 --- 96.85 b875556 --- 56 --- 96.85 b875556 --- 57 --- 96.85 b875556 --- 21 --- 96.85 Gostaria de saber como gerar uma consulta que numerasse os blocos como no exemplo abaixo a456852 --- 45 --- 78.23 --- 1 a456852 --- 44 --- 78.23 --- 2 a456852 --- 46 --- 78.23 --- 3 a456852 --- 48 --- 78.23 --- 4 a456852 --- 36 --- 78.23 --- 5 a456852 --- 21 --- 78.23 --- 6 b875556 --- 58 --- 96.85 --- 1 b875556 --- 56 --- 96.85 --- 2 b875556 --- 57 --- 96.85 --- 3 b875556 --- 21 --- 96.85 --- 4 Quem puder me ajudar eu seria eternamente grata Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2008 Acho que algumas das funções aggregate fazem isto o que você quer, dê uma olhada no manual. http://download-east.oracle.com/docs/cd/B10501_01/index.htm http://tahiti.oracle.com/pls/db92/db92.dri...amp;preference= Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 9, 2008 Não posso usar nenhuma função aggregate, to justamente fugindo delas. Nenhuma delas serve para numerar itens por grupo. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2008 Não conheço bem estas funções mas acho que a DENSE RANK faria isto que você quer. http://download.oracle.com/docs/cd/B10501_...35a.htm#1017938 Pq não foges da função aggregate ? Medo ? O banco não suporta ? você não as suporta ? :) Não vi nenhum jeito de fazer por sql. Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 9, 2008 Acontece que a tabela Parcela que estou usando possui mais de 155351332 de registros. Toda vez que utilizo uma função aggregate tipo, max, min, count , as tradicionais meu tempo de execução sobe de 0.745 segundos para 8 horas. Mesmo usando indices, hints de performance entre outras coisas não consigo uma performance melhor. Então estou quebrando meu select principal em vários outros, jogando o resultado numa tabela auxiliar. Sei lá. Já fiz uma porção de truques no oracle, mas isso está me matando. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2008 Se é uma tabela parcela você não poderia criar uma coluna numeradora ? Esta coluna já não existe ? Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 9, 2008 SE ELA ME RETORNASSE TODOS OS DADOS SIM, ACONTECE QUE QUANDO USO O FILTRO "where dt_rcb >= '01-may-2008' and dt_rcb <= '31-may-2008'" ELA RETIRA ALGUNS NÚMEROS DE PARCELAS. Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 9, 2008 O DENSE_RANK FUNCIONA PARA A NUMERAÇÃO, PORÉM NÃO RESOLVE MEU PROBLEMA DE PERFORMANCE. PRA MIM O IDEAL SERIA: OU MOSTRATAR APENAS OS NUMEROS DE CONTRATOS QUE ATENDAM O REQUISITO "where dt_rcb >= '01-may-2008' and dt_rcb <= '31-may-2008'" (ISSO SEM USAR GROUP BY O DISTINCT QUE DENIGRE A PERFORMANCE) OU MOSTRAR TODAS AS PARCELAS DO CONTRATO EM QUE PELO MENOS UMA DAS PARCELAS ATENDAM REQUISITO "where dt_rcb >= '01-may-2008' and dt_rcb <= '31-may-2008'". EXEMPLO. OU ESSA SOLUÇÃO A54545 B54545 OU ESSA A54545 --- 1 A54545 --- 2 -- '05-MAY-2008' A54545 --- 3 A54545 --- 4 -- '10-MAY-2008' A54545 --- 5 A54545 --- 6 B54545 --- 1 B54545 --- 2 B54545 --- 3 -- '11-MAY-2008' B54545 --- 4 ATUALMENTE EU SÓ CONSIGO A54545 --- 2 -- '05-MAY-2008' A54545 --- 4 -- '10-MAY-2008' B54545 --- 3 -- '11-MAY-2008' ISSO SEM USAR NENHUMA FUNÇÃO AGGREGATE POIS SENÃO MEU PROCESSAMENTO VAI PRA LÁ DE 8 HS Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2008 Jà tentou um indice pela data dt_rcb , ou até um indice sobre funcão trunc(dt_rcb,'mm') ou sendo o intervalo sempre um mês , criar uma coluna como o mês e alimenta-la por trigger, o indice sobre esta coluna. Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 9, 2008 A tabela já possui indice por dt_rcb, eu não tenho permissão pra mexer nesta tabela pq ela pertence a outro sistema. As melhores cabeças aqui não conseguem ver nenhum resultado. Até View eu tentei criar e nada. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2008 Já vi que é espinhento, não vi mesmo nenhuma solução. O que é gerado ? Um relatório ? Não poderia ser feito um processo atualizador que gerasse uma tabela auxiliar durante a noite ? Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 10, 2008 é gerado um arquivo do excel, o ruim que se demora muito o excel do usuário trava. não tenho permissão para rodar nenhum script a noite. acho que vou fazer a versão demorada mesmo e se alguém reclamar acho que ganharei a permissão. obrigada pela ajuda. esta história toda serviu para me tornar uma especialista em pog (programação orientada a gambiarras). valeu Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 10, 2008 Tem alguma ferramenta geradora de relatório , tipo Crystal ? No Crystal dá para fazer este tipo de totalizador e ele exporta para excell. Entre no campeonato de POG´s http://forum.imasters.com.br/index.php...0&start=150 Compartilhar este post Link para o post Compartilhar em outros sites
The Queen 0 Denunciar post Postado Setembro 10, 2008 Isso é uma idéia, porém de qualquer forma terei que dar os dados mastigados para o crystal e é ai que porca torce o rabo. Aquela consulta pequena só é a ponta do iceberg. Na realidade ela que está me dando mais trabalho pois o resto roda devagar mas sai em menos de dez minutos. O ruim é que assim, independente de apenas algumas parcelas de um contrato atenderem ao requisito "where dt_rcb >= '01-may-2008' and dt_rcb <= '31-may-2008'", tenho que trazer todas. Verei algum truque. Valeu. O crystal parece uma boa. Compartilhar este post Link para o post Compartilhar em outros sites