按计数和另一个标准MySQL抓取行

时间:2013-09-17 11:28:22

标签: mysql

我有一个订单表,其中有date_paid,用于保存订单处理的日期。 我还有一个买家的user_id列。

我如何获取在2013-04-01 00:00:00之前订购的所有user_id(唯一),但截至今日之前尚未发出任何订单。

我要做的是:

  1. 抓取所有订单,唯一身份用户ID:GROUP BY orders.user_id WHERE orders.date_paid < '2013-04-01 00:00:00'

  2. Foreach遍历它们并检查它们在该日期之后是否有任何订单WHERE date_paid > '2013-04-01 00:00:00'

  3. 这可以通过查询来完成吗?

2 个答案:

答案 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之前的订单数量。它要求至少有一个订单。第二个计算从那时起的订单数量。它要求没有订单。