0

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

我如何获取在 2013 年 4 月 1 日 00:00:00 之前下订单但直到今天日期之后还没有下订单的所有用户 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'

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

4

2 回答 2

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
于 2013-09-17T11:30:34.053 回答
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 之前的订单数量。它要求至少有一个订单。第二个计算从那时起的订单数量。它要求没有订单。

于 2013-09-17T11:32:16.123 回答