Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Estou enfrentando um problema recorrente nas minhas queries, já tentei algumas alternativas encontradas aqui, sem sucesso.
Tenho o seguinte select:
select
avaliacao.dt_liberacao,
avaliacao.cd_pessoa_fisica,
nome.nm_pessoa_fisica NOME_PCT,
decode(diag.qt_resultado,871,'Desnutrição grave',872,'Desnutrição moderada',873,'Desnutrição leve',
874,'Eutrofia',875,'Sobrepeso',876,'Obesidade')
from
med_avaliacao_paciente avaliacao,
pessoa_fisica nome,
med_avaliacao_result diag
where
diag.nr_seq_item = 1266
and diag.nr_seq_avaliacao = avaliacao.nr_sequencia
and avaliacao.cd_pessoa_fisica = nome.cd_pessoa_fisica
and avaliacao.dt_liberacao is not null
and ie_situacao = 'A'
O que quero é trazer apenas o último registro por pessoa, um das alternativas que tentei foi dada em outro tópico pelo moderador Motta, incluindo no where o código:
and avaliacao.dt_liberacao = (select max(avaliacao2.dt_liberacao)
from med_avaliacao_paciente avaliacao2
where avaliacao.cd_pessoa_fisica = avaliacao2.cd_pessoa_fisica)
Porém esse select só retorna um resultado...
Realmente preciso entender como funciona essa lógico, porque tenho vários selects semelhantes que preciso retirar os resultados "repetidos">
Em 11/09/2019 at 19:54, Motta disse:
Em tese estaria certo , o que
diag.nr_seq_item = 1266
Que fazer ?
Esse dado vem da tabela 'med_avaliacao_result', uma tabela onde tem o resultado de todos os itens de todas as avaliações do sistema. Estou restringido para o item 1266, que é o campo "Diagnóstico Nutricional" da avaliação 49, "Avaliação Nutricional".
Esse select é um select resumido, o completo se encontra abaixo, perceba que tenho de fazer várias joins da mesma tabela, puxando apenas itens distintos:
select
nome.nm_pessoa_fisica NOME_PCT,
decode(asg.qt_resultado,21,'Bem nutrido',22,'Risco nutricional',23,'Desnutrição leve',
24,'Desnutrição moderada',25,'Desnutrição grave') ASG_7P,
decode(an.qt_resultado,61,'Primário',62,'Secundário',63,'Terciário') NIVEL_AN,
decode(eat.qt_resultado,181,'< ou = 3 (Sem risco de broncoaspiração)',182,'> 3 (Com risco de broncoaspiração)') EAT10,
decode(mis.qt_resultado,501,'< 6 (Nutrido)',502,'> 6 (Desnutrição e Inflamação)'),
decode(diag.qt_resultado,871,'Desnutrição grave',872,'Desnutrição moderada',873,'Desnutrição leve',
874,'Eutrofia',875,'Sobrepeso',876,'Obesidade')
from
med_avaliacao_paciente codnome,
pessoa_fisica nome,
med_avaliacao_result asg,
med_avaliacao_result an,
med_avaliacao_result eat,
med_avaliacao_result mis,
med_avaliacao_result diag
where
asg.nr_seq_item = 1162 and an.nr_seq_item = 1166
and diag.nr_seq_item = 1266 and eat.nr_seq_item = 1180
and mis.nr_seq_item = 1218
and diag.nr_seq_avaliacao = asg.nr_seq_avaliacao
and asg.nr_seq_avaliacao = an.nr_seq_avaliacao
and an.nr_seq_avaliacao = eat.nr_seq_avaliacao
and eat.nr_seq_avaliacao = mis.nr_seq_avaliacao
and mis.nr_seq_avaliacao = codnome.nr_sequencia
and codnome.cd_pessoa_fisica = nome.cd_pessoa_fisica
and codnome.dt_liberacao is not null;
O resultado é (por exemplo):
>
Citar
Carlos Alberto Ferreira Desnutrição moderada Terciário > 6 (Desnutrição e Inflamação) Desnutrição moderada
Sebastião Pinto Navarro Filho Risco nutricional Terciário > 6 (Desnutrição e Inflamação) Obesidade
Antonio Apolinario da Silva Risco nutricional Terciário > 6 (Desnutrição e Inflamação) Desnutrição moderada
Antonio Apolinario da Silva Risco nutricional Terciário > 6 (Desnutrição e Inflamação) Desnutrição moderada
Quando adiciono no código
and codnome.dt_liberacao = (select max(codnome2.dt_liberacao)
from med_avaliacao_paciente codnome2
where codnome.cd_pessoa_fisica = codnome2.cd_pessoa_fisica)
O resultado é apenas os nomes que estão repetidos (com mais de uma avaliação), quando na verdade quero trazer todos, e aqueles que tiverem mais de uma avaliação, nesse caso, trazer apenas a última liberada (dt_liberacao).
Desde já, agradeço muito a ajuda!Liste sem o subselect ddo max e com a data e veja sd descrobe.
Não vi o erro.
Em tese estaria certo , o que
diag.nr_seq_item = 1266
Que fazer ?