Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andrea cerqueira

[Resolvido] pegar pedidos com duas ou mais faturas negativas

Recommended Posts

Tenho uma tabela com varias faturas de alguns pedidos, ou seja cada pedido tem varias faturas e estas podem estar pagas ou não.

O que quero fazer é pegar todos os pedidos que tenham mais de uma fatura não paga.

Todos os dados de que preciso estão em uma unica tabela, status, id_pedido, id_fatura mas não tô sabendo formular a query.

Alguem pode me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

select id_pedido from pedido
where status='aberto'
group by id_pedido
having count(id_fatura) > 1

 

Altere o SQL de acordo com seus dados e tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para verificar se esta dando certo, inclua um count no select, ficaria assim:

 

select id_pedido, count(id_fatura)
from pedido
where status='aberto'
group by id_pedido
having count(id_fatura) > 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou perfeitamente, tive que pegar os dados do representante e por isso fiz um inner joio.

agora preciso filtrar outra coisa, não podem ser pedidos de um mesmo anunciante, tipo se o cara fez tem uma anuncio desativado mais tem outro ativo ele não pode ser listado, minha dúvida é se eu devo fazer duas queres ou se tem como filtrar isso nessa query mesmo.

 

SELECT a.order_id, COUNT(a.id) qtd, b.id_repre, b.id_anunciante

FROM anuncios_retorno a

INNER JOIN anuncios b ON ( a.order_id = b.id_pedido )

WHERE a.status > 0

AND b.id_repre = 3

GROUP BY a.order_id

HAVING COUNT(a.id) > 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho certeza, vai depender um pouco de como os dados estão armazenados, mas você pode tentar assim:

 

SELECT a.order_id, COUNT(a.id) qtd, b.id_repre, b.id_anunciante
FROM anuncios_retorno a
INNER JOIN anuncios b ON ( a.order_id = b.id_pedido )
WHERE a.status > 0
AND b.id_repre = 3
GROUP BY a.order_id, b.id_repre, b.id_anunciante
HAVING COUNT(a.id) > 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, depende de como os dados estão armazenados. Talvez com um subselect, ao invez da junção, você resolve com apenas uma query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora foi :)

Só não tá funcioanando meu segundo problema, o de repetir anunciante

 

SELECT a.order_id, COUNT(a.id) qtd, b.id_repre, b.id_anunciante

FROM anuncios_retorno a,

( SELECT id_repre, id_anunciante, id_pedido FROM anuncios GROUP BY id_pedido ) b

WHERE a.status > 0

AND a.order_id = b.id_pedido

GROUP BY a.order_id

HAVING COUNT(a.id) > 1

 

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria ...

 

SELECT a.order_id, COUNT(a.id) qtd, b.id_repre, b.id_anunciante
FROM anuncios_retorno a,
( SELECT id_repre, id_anunciante, id_pedido FROM anuncios GROUP BY id_pedido ) b
WHERE a.status > 0
AND a.order_id = b.id_pedido
GROUP BY a.order_id, b.id_repre, b.id_anunciante
HAVING COUNT(a.id) > 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Expliquei errado, não é que eu não posso mostrar mais de um pedido do mesmo anunciante, e sim eu não posso mostrar os pedidos de um anunciante que tenha mais de um pedido e que um deles esteja ativo.

É mais complexo, essa query tá ficando meio monstra :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça por partes.

 

(1)

 

mostrar os pedidos de um anunciante que tenha mais de um pedido e que um deles esteja ativo

 

Mostrando

 

(2)

 

eu não posso mostrar os pedidos ...

 

faça a negativa do 1º caso

 

(3)

 

Conte

 

(4)

 

Faça o HAVING

 

A questão chave é o (1) mas depende do modelo e das regras para montar o SQL correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

To meio perdida ainda pq não seria essa a ordem de relevancia, tipo eu quero pegar os inadimplentes em primeiro lugar, ou seja pedidos com mais de uma fatura devedora.

Depois é que eu devo verificar se existem mais de 1 pedido do mesmo anunciante, pois existem inadimplentes que só têm um pedido mesmo entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça a query ir evoluindo então.

 

quero pegar os inadimplentes em primeiro lugar

 

faça esta query

 

Depois é que eu devo verificar se existem mais de 1 pedido do mesmo anunciante

 

Evolua a anterior ou faça outra e depois ligue as lógicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.