INNER JOIN - Problemas com WHERE
05/09/2019
0
SELECT a.cpf , a.dt_atendimento , a.insert_obs FROM atendimento WHERE insert_obs IS NOT NULL as a INNER JOIN ( SELECT cpf , max(dt_atendimento) as dt_atendimento FROM atendimento WHERE insert_obs IS NOT NULL GROUP BY cpf ) as b ON a.cpf = b.cpf
Se tiro o WHERE da primeira tabela a consulta funciona.
O problema é que preciso fazer essa seleção.
Qual seria a sintaxe correta nesse caso?
André Carreiro
Post mais votado
05/09/2019
SELECT a.cpf , a.dt_atendimento , a.insert_obs FROM atendimento a WHERE a.insert_obs IS NOT NULL and a.dt_atendimento = (select max(a2.dt_atendimento) from atendimento a2 where a2.cpf = a.cpf and a2.insert_obs IS NOT NULL)
Emerson Nascimento
Mais Posts
05/09/2019
Alex William
Não entendi porque voce quer fazer um INNER JOIN de uma tabela com ela mesma?
Não seria mais facil:
SELECT cpf , dt_atendimento , max(dt_atendimento) as dt_atendimento_max , insert_obs FROM atendimento WHERE insert_obs IS NOT NULL GROUP BY cpf
O que exatamente você precisa que a consulta retorne, talvez possamos te ajudar na consulta total em si.
Espero ter ajudado. :D
05/09/2019
André Carreiro
O resultado esperado é uma tabela que retorne a linha com a data de atendimento (dt_atendimento) mais atual para cada cpf. Porém, quero manter o campo de observação (insert_obs) no resultado de forma que o resultado final mostre:
-data de atendimento
-cpf
-observação
Mas considere no agrupamento somente o cpf, e não a observação.
Essa consulta resulta em erro:
SELECT cpf, max(dt_atendimento), insert_obs FROM atendimento GROUP BY cpf
Pois, para 'insert_obs' estar ali, precisaria estar no GROUP BY também
05/09/2019
André Carreiro
Qual seria a forma correta de fazer isso já que o exemplo exposto dá erro?
12/09/2019
Mario
Qual seria a forma correta de fazer isso já que o exemplo exposto dá erro?
Bom dia.
Nesse caso você poderia colocar o where no final dos joins ou então usar com CROSS APPLY.
A solução do colega assim resolveria seu problema, deu certo?
SELECT
a.cpf
, a.dt_atendimento
, a.insert_obs
FROM
atendimento a
WHERE
a.insert_obs IS NOT NULL
and a.dt_atendimento = (select max(a2.dt_atendimento) from atendimento a2 where a2.cpf = a.cpf and a2.insert_obs IS NOT NULL)
Clique aqui para fazer login e interagir na Comunidade :)