按计数和另一个标准 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'

这可以通过查询完成吗?

这是一种使用聚合和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

最新更新