[firebase-br] Group By

Marcelo Moreira marcelomoreira.souza em gmail.com
Qui Ago 22 14:49:42 -03 2013


Renan,

Até tinha pensando mesmo em usar um SP, não levei adiante assim por
imaginar que possa ser resolvido com um group by
Continuo procurando uma alternativa.

Obrigado.


Em 22 de agosto de 2013 14:42, Renan Rogowski Pozzo
<renanrpozzo em gmail.com>escreveu:

> Olá Marcelo,
> tente com uma procedure.
>
> Algo assim:
>
> *create or alter procedure TESTE (*
> *    CLIENTE integer)*
> *returns (*
> *    ID_ATEN integer,*
> *    ID_ATENDIMENTO integer,*
> *    ID_OCORRENCIA integer,*
> *    DATA_HORA timestamp,*
> *    DESCRICAO varchar(50),*
> *    STATUS varchar(50),*
> *    USUARIO varchar(50))*
> *)*
> *as*
> *begin*
> *for*
> *  select a.id_atendimento*
> *  from ATENDIMENTO a where a.id_cliente = :cliente*
> *  into :id_aten*
> *do*
> *for*
> *select first 1*
> *    AO.ID_ATENDIMENTO,*
> *    AO.ID_ATENDIMENTO_OCORRENCIA,*
> *    AO.DATA_HORA,*
> *    AA.DESCRICAO as ASSUNTO_DESCRICAO,*
> *    AST.DESCRICAO as STATUS_DESCRICAO,*
> *    U.NOME as USUARIO_NOME*
> *from ATENDIMENTO_OCORRENCIA AO*
> *inner join ATENDIMENTO A on (AO.ID_ATENDIMENTO = A.ID_ATENDIMENTO)*
> *inner join ATENDIMENTO_ASSUNTO AA on (A.ID_ATENDIMENTO_ASSUNTO =*
> *AA.ID_ATENDIMENTO_ASSUNTO)*
> *inner join ATENDIMENTO_STATUS AST on (A.ID_ATENDIMENTO_STATUS =*
> *AST.ID_ATENDIMENTO_STATUS)*
> *inner join USUARIO U on (AO.ID_USUARIO = U.ID_USUARIO)*
> *WHERE AO.id_atendimento = :id_aten*
> *order by AO.data_hora desc*
> *into :ID_ATENDIMENTO, :ID_OCORRENCIA, :DATA_HORA timestamp,*
> *     :DESCRICAO varchar(50), :STATUS varchar(50), :USUARIO varchar(50))*
> *do*
> *suspend;*
> *end*
>
> Só tem que adaptar a suas tabelas e campos.
> Veja se atende a sua necessidade.
>
> Espero ter ajudado.
> Abraço,
> Renan
>
>
> Em 22 de agosto de 2013 12:14, Marcelo Moreira <
> marcelomoreira.souza em gmail.com> escreveu:
>
> > Patricia,
> > Neste me caso AO.ID_ATENDIMENTO_OCORRENCIA é único, não vai repetir.
> > Por isso imaginei colocando um max nele, traria sempre o ultimo registro.
> >
> > Ainda nao consegui resolver e se alguem puder me dar uma força.
> > Obrigado!!
> >
> >
> > Em 20 de agosto de 2013 12:04, Patricia Aparecida Ayres <
> > patricia.ayres em bol.com.br> escreveu:
> >
> > > Marcelo,
> > >
> > > Veja bem, para um max(AO.ID_ATENDIMENTO_OCORRENCIA) possivelmente deve
> > > existir mais AO.DATA_HORA diferenete.
> > > exemplo:
> > > AO.ID_ATENDIMENTO_OCORRENCIA -  AO.DATA_HORA
> > > 1 - 09/05/2005 17:28:21
> > > 1 - 09/05/2005 18:00:55
> > > 1 - 10/05/2005 14:30:17
> > >
> > > sugiro você incluir para o campo AO.DATA_HORA um max, min, etc para que
> > > traga apenas um registro. Talvez, para os demais campos  você fazer o
> > mesmo.
> > >
> > > Att.
> > > Patrícia
> > >
> > >
> > > Em 16/08/2013 12:51, Marcelo Moreira < marcelomoreira.souza em gmail.com>
> > > escreveu:
> > > Pessoal,
> > > Alguem pode me ajudar a identificar onde esta o erro neste select.
> > Firebird
> > > 2.1
> > >
> > > select
> > >  AO.ID_ATENDIMENTO,
> > >  max(AO.ID_ATENDIMENTO_OCORRENCIA),
> > >  AO.DATA_HORA,
> > >  AA.DESCRICAO as ASSUNTO_DESCRICAO,
> > >  AST.DESCRICAO as STATUS_DESCRICAO,
> > >  U.NOME as USUARIO_NOME
> > > from ATENDIMENTO_OCORRENCIA AO
> > > inner join ATENDIMENTO A on (AO.ID_ATENDIMENTO = A.ID_ATENDIMENTO)
> > > inner join ATENDIMENTO_ASSUNTO AA on (A.ID_ATENDIMENTO_ASSUNTO =
> > > AA.ID_ATENDIMENTO_ASSUNTO)
> > > inner join ATENDIMENTO_STATUS AST on (A.ID_ATENDIMENTO_STATUS =
> > > AST.ID_ATENDIMENTO_STATUS)
> > > inner join USUARIO U on (AO.ID_USUARIO = U.ID_USUARIO)
> > > WHERE A.ID_CLIENTE = 1
> > > group by AO.ID_ATENDIMENTO
> > > order by AO.data_hora desc
> > >
> > > O que acontece é que para um registro na tabela ATENDIMENTO eu posso
> ter
> > > varios registros relacionados na tabela ATENDIMENTO_OCORRENCIA.
> > >
> > > O que eu preciso fazer é agrupar pelo ID_ATENDIMENTO mas retornando
> > sempre
> > > o ultimo registro candastrado na tabela ATENDIMENTO_OCORRENCIA.
> > >
> > > Grato pela atenção.
> > >
> > > --
> > > Marcelo Moreira
> > > (31) 8420-2723
> > > E-mail / MSN: marcelomoreira.souza em hotmail.com
> > > E-mail: marcelomoreira.souza em gmail.com
> > > Skype: marcelomoreira.souza
> > > ______________________________________________
> > > 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
> > >
> > >
> > > ______________________________________________
> > > 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
> > >
> >
> >
> >
> > --
> > Marcelo Moreira
> > (31) 8420-2723
> > E-mail / MSN: marcelomoreira.souza em hotmail.com
> > E-mail: marcelomoreira.souza em gmail.com
> > Skype: marcelomoreira.souza
> > ______________________________________________
> > 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
> >
> ______________________________________________
> 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
>



-- 
Marcelo Moreira
(31) 8420-2723
E-mail / MSN: marcelomoreira.souza em hotmail.com
E-mail: marcelomoreira.souza em gmail.com
Skype: marcelomoreira.souza



Mais detalhes sobre a lista de discussão lista