INNER JOIN - Problemas com WHERE

05/09/2019

0

Tenho a query abaixo que me retorna este erro: ERROR: syntax error at or near "as" LINE 7: as a

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

André Carreiro

Responder

Post mais votado

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)

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

05/09/2019

Alex William

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:
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
Responder

05/09/2019

André Carreiro

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:

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
Responder

05/09/2019

André Carreiro

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?
Responder

12/09/2019

Mario

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?




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)
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar