我有这个疑问
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]
我从 SQL Server 收到此错误:
除非聚合位于 HAVING 子句或选择列表中的子查询中,并且被聚合的列是外部引用,否则聚合可能不会出现在 WHERE 子句中。
那里可能有什么问题?
正如错误所暗示的,需要从
WHERE
子句中删除聚合函数,如果需要根据聚合函数进行过滤,则可以使用
HAVING
,但由于 HAVING 与 GROUP BY 一起使用,因此 HAVING 也需要具有聚合函数,因此您的条件将不受支持,你可以使用
我不太确定您的用例,但下面是运行的更正示例查询
MIN(b.smsDelivered)
由于该WHERE
子句是在之前执行的,因此优化器不知道的值是多少SELECT
。执行顺序
使用子查询并删除该
HAVING
子句或者直接删除该
WHERE
条款。