Array
(
)

SQL error Erro comando Having

João Cristo
   - 03 dez 2015

Boa tarde Prezados,
Tenho o comando abaixo apresentando o erro "Cannot use an aggregate function in a WHERE clause, use HAVING instead", neste comando, preciso criar um filtro entre a "DATPRO2" e o maior valor de odxfun "MAX(ORDXFUN)", porém, não sei como utilizar o comando Having na minha consulta.

SELECT ORDSERV.TAG, ORDSERV.DATPRO2, MAX(ORDXFUN.DATHORFIM)
FROM ORDXFUN
LEFT OUTER JOIN ORDSERV ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD
WHERE CASE WHEN MAX(ORDXFUN.DATHORFIM) IS NULL
THEN DATPRO2
ELSE MAX(ORDXFUN.DATHORFIM) END BETWEEN :DATA_INICIAL AND :DATA_FINAL

GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2
ORDER BY 1

Marcos P
   - 03 dez 2015

Sempre que postar código no fórum use a tag "Inserir Codigo" !

Você não pode usar HAVING dentro do WHERE, pois eles são a mesma coisa... com escopos diferentes !

Explico melhor, o HAVING é o comando que você usa para filtrar valores a partir de funções de agregação.

Como você colocou o MAX(), deve tirá-lo do corpo do WHERE e adaptá-lo ao HAVING...

Repare que WHERE e HAVING podem coexistir na mesma query. O WHERE para as condições unitárias e o HAVING para as condições agregadas.

Faça o seguinte... ajuste sua query para listar TODOS os registros que você precisa, ou seja... todos os MAX().

Depois, retorne seu código que eu lhe ajudo com o filtro.

Ok ?!?

P.S.: responder posts anteriores, no sentido de encerrá-los, é uma boa prática para você conseguir ajuda por aqui.