Eu tenho essa dúvida
SELECT
a.Campaign,
COUNT(DISTINCT a.Customer) AS 'Records',
MIN(a.LastRecord) AS 'First Record',
MAX(a.LastRecord) AS 'Last Record',
MAX(a.daytime) AS 'Records up to'
FROM
contacts.dbo.contacts_ALL a
JOIN
sms b ON a.Customer = b.Customer
WHERE
a.LastRecord >= MIN(b.smsDelivered)
GROUP BY
a.Campaign
HAVING
a.LastRecord >= MIN(b.smsDelivered)
ORDER BY
a.Campaign DESC, [First Record]
Recebo este erro do SQL Server:
Um agregado pode não aparecer na cláusula WHERE, a menos que esteja em uma subconsulta contida em uma cláusula HAVING ou em uma lista de seleção, e a coluna que está sendo agregada seja uma referência externa.
O que pode estar errado aí?
Como o erro sugere, a função de agregação precisa ser removida da
WHERE
cláusula,Se você precisar filtrar com base na função de agregação, você pode usar
HAVING
, mas como HAVING é usado em conjunto com GROUP BY , HAVING também precisa ter uma função de agregação, então sua condiçãonão será suportado, em vez disso você pode usar
Não tenho muita certeza sobre seu caso de uso, mas abaixo está uma consulta de exemplo corrigida que é executada
O otimizador não sabe qual é o valor de ,
MIN(b.smsDelivered)
pois aWHERE
cláusula é executada antes deSELECT
.Ordem de execução
Use uma subconsulta e remova a
HAVING
cláusulaou simplesmente remover a
WHERE
cláusula.