Jump to content
Sign in to follow this  
theteo

Distinct

Recommended Posts

Boa noite

Amigos, o codigo abaixo funciona perfeitamente

 

SELECT p.id_protocolo, p.protocolo, p.assunto, p.status, t.pdf
FROM
tbl_protocolos p, tbl_prot_tramitacoes t
WHERE
p.id_protocolo = t.id_protocolo AND
t.id_setor_origem = 70
Como eu posso incluir um distinct pelo ID_PROTOCOLO pois da maneira abaixo não funciona
SELECT DISTINCT p.id_protocolo, p.protocolo, p.assunto, p.status, t.pdf
FROM
tbl_protocolos p, tbl_prot_tramitacoes t
WHERE
p.id_protocolo = t.id_protocolo AND
t.id_setor_origem = 70

 

Share this post


Link to post
Share on other sites

O DISTINCT vale para TODOS os campos , ou seja , o ID_PROTOCOLO se repete se houver um ASSUNTO diverso.

Share this post


Link to post
Share on other sites

Opa Motta, beleza ?

entao, mas tem como contornar isso ?

Existe, talvez, uma outra forma pra fazer essa query ?

 

O problema ai Motta é quando eu envolvo outro campo de outra tabela.

 

SELECT DISTINCT p.id_protocolo, p.protocolo, p.assunto, p.status
FROM
tbl_protocolos p, tbl_prot_tramitacoes t
WHERE
p.id_protocolo = t.id_protocolo AND
t.id_setor_origem = 70
Me trás exatamente o que eu quero, mas quando uso o join ai ferra tudo.
Fiz assim e tb funcionou
SELECT DISTINCT p.id_protocolo, p.protocolo, p.assunto, p.status FROM tbl_protocolos p
INNER JOIN
tbl_prot_tramitacoes ON p.id_protocolo = tbl_prot_tramitacoes.id_protocolo AND
tbl_prot_tramitacoes.id_setor_origem = 70
Agora como que eu seleciono campos da tbl_prot_tramitacoes ?
Edited by theteo

Share this post


Link to post
Share on other sites

A questão é que se existir mais uma tramitação para um protocolo ela gera mais um registro , não é erro.

Share this post


Link to post
Share on other sites

Entendi o que vc falou.

Mas eu quero saber se existe uma forma de retornar os valores sem duplicar, algo como:

SELECT DISTINCT p.id_protocolo, p.protocolo, p.assunto, p.status FROM tbl_protocolos p
INNER JOIN
tbl_prot_tramitacoes (pdf,data) ON p.id_protocolo = tbl_prot_tramitacoes.id_protocolo AND
tbl_prot_tramitacoes.id_setor_origem = 70
Assim eu teria
id_protocolo,protocolo,assunto,status,pdf,data

Share this post


Link to post
Share on other sites

Não entendi faz um exemplo com dados por favor.

Share this post


Link to post
Share on other sites

tabela protocolo

id_protocolo
numero
assunto

 

1 | ra1 | teste 1

2 | ra2 | teste 2

3 | ra3 | teste 3

 

tabela prot_tramitacoes

id_protocolo

pdf

setor_origem

1 | pdf1 | 70
1 | pdf1 | 80 ( descartar )
1 | pdf1 | 70 ( descartar )

 

2 | pdf2 | 70

2 | pdf2 | 2 ( descartar )

2 | pdf2 | 70 ( descartar )

 

3 | pdf3 | 70

 

O QUE EU QUERO COMO RESPOSTA ( where tabela prot_tramitacoes.setor_origem = 70 )

id_protocolo | numero | assunto | pdf

 

1 | ra1 | teste 1 | pdf1
2 | ra2 | teste 2 | pdf2

3 | ra3 | teste 3 | pdf3

 

SELECT DISTINCT p.id_protocolo, p.numero, p.assunto FROM tbl_protocolos p
INNER JOIN
tbl_prot_tramitacoes ON p.id_protocolo = tbl_prot_tramitacoes.id_protocolo AND
tbl_prot_tramitacoes.id_setor_origem = 70
Isso ai em cima funciona, falta agora trazer o campo PDF da tabela tbl_prot_tramitacoes.
Edited by theteo

Share this post


Link to post
Share on other sites

Apenas colocar a coluna pdf no select não resolveu !?

Share this post


Link to post
Share on other sites
Mota, ainda nada

Eu preciso do campo pdf da tbl_prot_tramitacoes ( onde há repetição do id_protocolo ) e preciso tb
do campo numero e assunto da tbl_protocolos ( onde NAO há repetiçao do id_protocolo )
lembrando que é exatamente o id_protocolo a chave estrangeira.
Agora, como eu trago esses registros ?
Edited by theteo

Share this post


Link to post
Share on other sites

SELECT DISTINCT p.id_protocolo, p.numero, p.assunto , t.pdf

FROM tbl_protocolos p

INNER JOIN

tbl_prot_tramitacoes t ON p.id_protocolo = tbl_prot_tramitacoes.id_protocolo

AND

tbl_prot_tramitacoes.id_setor_origem = 70

 

 

 

!?

Share this post


Link to post
Share on other sites
SELECT DISTINCT p.id_protocolo, p.numero, p.assunto , t.pdf

FROM tbl_protocolos p

INNER JOIN

tbl_prot_tramitacoes t ON p.id_protocolo = t.id_protocolo

AND

t.id_setor_origem = 70


traz repetidos


mas, se eu fizer assim:



SELECT DISTINCT p.id_protocolo, p.numero, p.assunto

FROM tbl_protocolos p

INNER JOIN

tbl_prot_tramitacoes t ON p.id_protocolo = t.id_protocolo

AND

t.id_setor_origem = 70



Sem o pdf da tabela onde HÁ REPETIÇÃO do id_protocolo, dá CERTO, mas ai nao vem o pdf

Share this post


Link to post
Share on other sites


SELECT DISTINCT p.id_protocolo, p.numero, p.assunto , t.pdf

FROM tbl_protocolos p

INNER JOIN tbl_prot_tramitacoes t ON p.id_protocolo = t.id_protocolo

AND t.id_setor_origem = 70

ans t.numero = ( select max(t2.numero)

from tbl_prot_transmissoees t2

where t2.id_protocolo = t.id_protocolo )

Edited by Motta

Share this post


Link to post
Share on other sites
SELECT DISTINCT p.id_protocolo, p.protocolo, p.assunto , t.pdf
FROM tbl_protocolos p
INNER JOIN tbl_prot_tramitacoes t ON p.id_protocolo = t.id_protocolo
AND t.id_setor_origem = 70
AND t.id_protocolo = ( select max(t2.id_protocolo)
from tbl_prot_tramitacoes t2
where t2.id_protocolo = t.id_protocolo )
Motta, agradeço profundamente seu esforço em me ajudar.
O código acima reflete exatamente o que tenho no banco, mas INFELIZMENTE ainda trouxe id_protocolo REPETIDO.
NUMA TENTATIVA DESESPERADA, FIZ ASSIM TB:

SELECT p.id_protocolo, p.protocolo, p.assunto , t.pdf
FROM tbl_protocolos p
INNER JOIN tbl_prot_tramitacoes t ON p.id_protocolo = t.id_protocolo
AND t.id_setor_origem = 70
AND t.id_protocolo = ( select DISTINCT t2.id_protocolo
from tbl_prot_tramitacoes t2
where t2.id_protocolo = p.id_protocolo )
Mesmo resultado do q vc postou.
Edited by theteo

Share this post


Link to post
Share on other sites

rodou o #15 !?

 

o max não é em protocolo ....

Share this post


Link to post
Share on other sites

Motta, tudo OK agora. resolvido. mais uma vez obrigado por sua ajuda.

 

 

SELECT b.id_protocolo, b.protocolo, b.assunto, b.assunto, a.numero_doc, a.pdf, a.data_tramitacao, DATEDIFF(now(),a.data_tramitacao) as diferenca
FROM tbl_prot_tramitacoes AS a
INNER JOIN tbl_protocolos AS b ON
a.id_protocolo = b.id_protocolo
WHERE a.id_tramitacao IN (SELECT MIN(id_tramitacao)
FROM tbl_prot_tramitacoes
WHERE id_setor_origem = 70 GROUP BY id_protocolo)
Edited by theteo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.