我有一个订单表,其中有date_paid,用于保存订单处理的日期。我还有一个user_id栏供买家使用。
我怎样才能抓取所有在日期 2013-04-01 00:00:00 之前下过订单但在今天之后没有下过订单的user_id(唯一)。
我会做的是:
-
抓取所有订单,唯一用户ID:
GROUP BY orders.user_id WHERE orders.date_paid < '2013-04-01 00:00:00'
-
Foreach 循环访问它们并检查它们在该日期之后是否有任何订单
WHERE date_paid > '2013-04-01 00:00:00'
这可以通过查询完成吗?
这是一种使用聚合和having
子句的方法:
select user_id
from orders o
group by user_id
having sum(case when date_paid < '2013-04-01' then 1 else 0 end) > 0 and
sum(case when date_paid >= '2013-04-01' then 1 else 0 end) = 0;
having
条款中的第一个条件计算 2013-04-01 之前的订单数量。 它要求至少有一个订单。 第二个计算自那时以来的订单数量。 它要求没有订单。
select o.user_id
from orders o
GROUP BY o.user_id
having sum(o.date_paid < '2013-04-01') > 0
and sum(o.date_paid > '2013-04-01') = 0