我正在尝试获取订购了类别ID为10但本月没有订购的客户的所有电子邮件地址。如果他们本月订购了任何类型的categoryID,那么我不想包含它们。
我正在使用此查询,但我认为它不是非常有效,它已经运行了很长时间。
SELECT
contactEmail,
(select max(orderDate) from orders o where o.customerID=orders.customerID) latestOrder
FROM orders
WHERE categoryID='7'
group by contactEmail
HAVING latestOrder <= '2014-04-01 00:00:00'
有更好的方法吗?
答案 0 :(得分:1)
您不需要子查询。您已在主查询中引用orders
。
与此类似的东西应该有效(未经测试)
SELECT
contactEmail,
max(orderDate) as latestOrder
FROM orders
WHERE categoryID='7'
group by customerID
HAVING latestOrder <= '2014-04-01 00:00:00'
答案 1 :(得分:0)
我想你想要这样的东西:
SELECT contactEmail
FROM orders
group by contactEmail
HAVING max(orderDate) <= '2014-04-01 00:00:00' and
sum(category = '10') > 0;
请注意,这会将两个条件都放在having
子句中,并且不会使用where
子句进行过滤。