[firebase-br] unico registro

Augusto junior gutopj02 em gmail.com
Qui Mar 19 11:54:37 -03 2009


Elton....

vou fazer uma cirurgia amanha ... e hoje tenho mil coisas para resolver..
assim que eu voltar a trabalhar ... faço os testes e passo para seu e-mail

valeu a força
Augusto

2009/3/19 Elton da Motta Barbosa <embarbosa em gmail.com>

> olá augusto,
>
> Pelo visto demorou menos q o anterior (sem o campodata+0) certo?
>  Caso afirmativo isso é pq o índice nesse campo na verdade está
> atrasando a pesquisa e/ou a ordenação dos dados...
> Faz uma pesquisa sobre índices em campos do tipo date tem alguma coisa
> em algum lugar q eu num lembro onde ;)
>
> Como tinha dito antes, postei uma dúvida desse SQL no FB support group
> visto q vou precisar de um SQL parecido num projeto novo (embora no
> meu caso acho q vou ficar com a outra alternativa). O Tysvær me
> respondeu algo como segue (apenas adaptei pro seu BD)
>
>
> select C.nome, SS.*, (current_date - SS.vencimento) as atraso
> from clientes C
> inner join ctreceber SS on C.codigo = SS.cliente
> where SS.VENCIMENTO < current_date
> and SS.SITUACAO = 'D'
> and not exists(select null
> from ctreceber stemp
> where stemp.cliente = C.ID
> and stemp.SITUACAO = 'D'
> and (stemp.VENCIMENTO < ss.VENCIMENTO
> or (stemp.VENCIMENTO = ss.VENCIMENTO
> and stemp.rdb$db_key < ss.rdb$db_key)))
> order by C.nome
>
> Algumas considerações que ele passou (mal-traduzido por mim , e
> adaptado para o seu BD  :o)-:
>
> "A parte do NOT EXISTS assegura que apenas um registro com o mais
> antigo vencimento entre no resultado.
> Se os clientes nunca compram duas vezes no mesmo dia, então vc não
> precisa do OR."
> ... acho q não podemos garantir isso né?
>
> "Normalmente usaria a Chave primaria no lugar de rdb$db_key, mas não
> sei se tem uma chave primaria e usando rdb$db_key deve ser ao menos
> tão rápido quanto."
> ... Faça um teste substituindo stemp.rdb$db_key pelo campo
> stemp.registro. continuando...
>
> "(...)
> Acredito q seja mais rápido q seu SQL (você pode querer adicionar +0
> para stemp.Vencimento para otimizar(...)"
>
> ... então mais uma sugestão (parecida com a que passei)...
> alterar de
> "and (stemp.VENCIMENTO < ss.VENCIMENTO
> or (stemp.VENCIMENTO = ss.VENCIMENTO "
> para
> "and (stemp.VENCIMENTO+0 < ss.VENCIMENTO
> or (stemp.VENCIMENTO+0 = ss.VENCIMENTO "
>
> Se puder fazer essas alterações e testes (um por um e eles em
> combinações) e mandar os resultados (e cada plan tb :).
> Aqui eu executei e não deu muita diferença pq o meu BD atual não é
> grande e nem tenho um indice no campo Vencimento...
>
> espero q ajude
>
> t+
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista