INNER JOIN - Problemas com WHERE
Tenho a query abaixo que me retorna este erro: ERROR: syntax error at or near "as" LINE 7: as a
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?
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
Curtidas 0
Melhor post
Emerson Nascimento
05/09/2019
tente assim:
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)
GOSTEI 1
Mais Respostas
Alex William
05/09/2019
Olá, tudo bem amigo.
Não entendi porque voce quer fazer um INNER JOIN de uma tabela com ela mesma?
Não seria mais facil:
O que exatamente você precisa que a consulta retorne, talvez possamos te ajudar na consulta total em si.
Espero ter ajudado. :D
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
GOSTEI 0
André Carreiro
05/09/2019
Olá!
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:
Pois, para 'insert_obs' estar ali, precisaria estar no GROUP BY também
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
GOSTEI 0
André Carreiro
05/09/2019
Minha dúvida, na verdade, diz respeito à sintaxe: ao fazer JOIN com 2 tabelas quero incluir uma uma condição WHERE antes do alias da tabela.
Qual seria a forma correta de fazer isso já que o exemplo exposto dá erro?
Qual seria a forma correta de fazer isso já que o exemplo exposto dá erro?
GOSTEI 0
Mario
05/09/2019
Minha dúvida, na verdade, diz respeito à sintaxe: ao fazer JOIN com 2 tabelas quero incluir uma uma condição WHERE antes do alias da tabela.
Qual seria a forma correta de fazer isso já que o exemplo exposto dá erro?
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)
GOSTEI 0