Ir para conteúdo

Arquivado

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

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Compartilhar este post


Link para o post
Compartilhar em outros 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

 

 

 

!?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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 )

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

rodou o #15 !?

 

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

Compartilhar este post


Link para o post
Compartilhar em outros 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)

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.