我有一个订单表,其中有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'
这可以通过查询来完成吗?
答案 0 :(得分:1)
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
答案 1 :(得分:1)
以下是使用聚合和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之前的订单数量。它要求至少有一个订单。第二个计算从那时起的订单数量。它要求没有订单。