我有一个带有列名称的表:
order_id (bigint),
user_id(bigint) ,
team_leader (text),
processing_at (date).
我想查找July
首次订购的客户数量,即他们之前没有下订单July
。我正在学习MySQL
。有人可以帮我解决这个问题吗?
表有73159行。
您可以尝试:
SELECT COUNT(DISTINCT user_id)
FROM yourTable t1
WHERE processing_at >= '2021-07-01' AND processing_at < '2021-08-01' AND
NOT EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.user_id = t1.user_id AND
t2.processing_at < '2021-07-01');
上面的查询计算的是在2021年7月这一月下了任何订单的不重复用户的数量。该7月份的订单为第一订单的条件是由存在逻辑强制执行的,该条件断言我们无法在以下位置为该用户找到任何订单比七月早一个月。
编辑:
关于性能,上述查询可能受益于以下复合索引:
CREATE INDEX idx ON yourTable (processing_at, user_id);
如果使用此索引,它将涵盖这两个WHERE
子句以及外部SELECT
子句。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句