INNER JOIN - Problemas com WHERE

SQL

PostgreSQL

05/09/2019

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

Curtidas 0

Melhor post

Emerson Nascimento

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

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

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:

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

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?
GOSTEI 0
Mario

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?




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
POSTAR