Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
Opa Motta, blz ?
entao, mas tem como contornar isso ?
Existe, talvez, uma outra forma pra fazer essa query ?
>
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 ?
A questão é que se existir mais uma tramitação para um protocolo ela gera mais um registro , não é erro.
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
Não entendi faz um exemplo com dados por favor.
tabela protocolo
id_protocolo
numero
assunto
1 | ra1 | teste 1
2 | ra2 | teste 2
3 | ra3 | teste 3
tabela prot_tramitacoes
id_protocolo
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.
http://forum.imasters.com.br/topic/512214-selecionando-item-max/
Qual o critério para descartar os outros "70" , talvez um subselect com max ou min.
sem critério, só preciso q apareça apenas 1.
Apenas colocar a coluna pdf no select não resolveu !?
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 ?
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
!?
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
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 )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.
rodou o #15 !?
o max não é em protocolo ....
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)
O DISTINCT vale para TODOS os campos , ou seja , o ID_PROTOCOLO se repete se houver um ASSUNTO diverso.