Em 17/05/12, Marcelo Silva (IG)<[email protected]> escreveu:
> Ainda nao deu
>
> Mas estou na luta aqui
>
> From: Edson neto
> Sent: Thursday, May 17, 2012 2:26 PM
> To: Marcelo Silva (IG) ; Comunidade PostgreSQL Brasileira
> Subject: Re: [pgbr-geral] Ajuda em Select
>
> Marcelo, acredito que utilizando um not exists resolveria seu problema
> with tmp as (select distinct
>   a.pedido,
>   a.status,
>   b.descricao
> from mv_servicos_status a
> inner join mv_status b on(b.status = a.status)
> where (a.data_bai + a.hora_bai) =
>   (select max(data_bai + hora_bai)
>    from mv_servicos_status
>    where (pedido = a.pedido)
>      and(codigo = a.codigo)
>      and(a.pedido in(36663, 37228)))
> order by a.pedido)
>
>
> select * from tmp t1 where t1.status='N' and not exists(select 1 from tmp t2
> where t1.pedido=t2.pedido and t2.status!='N');
>
>
>
>
>
> Em 17 de maio de 2012 14:14, Marcelo Silva (IG) <[email protected]>
> escreveu:
>
>   Pessoal, tenho o seguinte select:
>
>   select distinct
>     a.pedido,
>     a.status,
>     b.descricao
>   from mv_servicos_status a
>   inner join mv_status b on(b.status = a.status)
>   where (a.data_bai + a.hora_bai) =
>     (select max(data_bai + hora_bai)
>      from mv_servicos_status
>      where (pedido = a.pedido)
>        and(codigo = a.codigo)
>        and(a.pedido in(36663, 37228)))
>   order by a.pedido
>
>
>   Que me retorna as linhas:
>
>   36663 | I | CONFÊNCIA PEDIDO
>   36663 | N | ENTREGUE AO CLIENTE
>   37228 | N | ENTREGUE AO CLIENTE
>
>   Agora preciso de um select incorporado com o acima que me retorne somente
> os pedidos que tiverem somente ‘N’
>   Ou seja o 36663 não entraria no resultado do segundo select por ter um
> status ‘I’ em sua lista
>   Não posso simplesmente colocar um and(status = ‘N’) porque o pedido vai
> mudando o status a cada instante
>
>   Explicando o cenário:
>
>   Os dados que tenho são uma tabela onde guardo o status dos pedidos e
> dentro dos pedidos tenho varios servicos, exemplo:
>
>   pedido | codigo | status
>   1234   |   01   |   I –> CONFERENCIA
>   1234   |   02   |   N –> ENTREGUE
>   1234   |   03   |   A –> AGENDAR
>   1234   |   04   |   I –> CONFERENCIA
>   1234   |   05   |   E –> EM ESPERA
>   4321   |   01   |   N –> ENTREGUE
>   4321   |   02   |   N –> ENTREGUE
>   4321   |   03   |   N –> ENTREGUE
>
>   Preciso trazer somente os pedidos que estão com o ultimo status todos =
> “N”,
>   apesar do pedido 1234 ter um “N” ele não viria pois tem outros status nos
> outros servicos,
>   mas só o 4321 viria por estar totalmente “N” (ENTREGUE)
>
>
>   Tentei algumas coisas aqui mas não cheguei ao resultado esperado
>
>   Não sei se fui claro na explicação, espero que sim.
>   Será que podem dar uma dica nesse select?
>   Claro que não precisam me dar o select pronto,
>   mas só a uma dica de como formatar esse select,
>   sabe quando a cabeça da um nó, rsrsrs
>

Não consigo entender por que a solução do Edson não deu certo.
Talvez eu não tenha entendido o problema corretamente.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a