mysql:查找在一个日期(时间)上有条目但在另一个日期(时间)上没有条目的用户行

efzxgjgh  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(342)

我有一组用户在8月1日有一个条目。我想找到在8月1日有一个条目但在8月2日没有做任何事情的用户。
现在是十月,所以这件事已经过去很久了。
我有限的知识告诉我: SELECT * FROM users WHERE order_date BETWEEN '2018-08-01 00:00:00' and '2018-08-01 23:59:59' AND NOT BETWEEN '2018-08-02 00:00:00' AND '2018-08-02 23:59:59'; 尽管这会导致语法错误。
我想我应该加入吗?尽管我还不完全明白。

ocebsuys

ocebsuys1#

正如您所问的,连接是一个经典的解决方案:根据用户id和不同的订单日期,在同一个表中查找,其中连接返回null(不是在8月2日):

SELECT

* 

FROM
users u1
LEFT JOIN users u2 ON u1.user_id = u2.user_id AND u2.order_date BETWEEN '2018-08-02 00:00:00' AND '2018-08-02 23:59:59'
WHERE
u1.order_date BETWEEN '2018-08-01 00:00:00' and '2018-08-01 23:59:59'
AND u2.user_id IS NULL
jucafojl

jucafojl2#

相关子查询可以很好地实现这一点:

SELECT * 
FROM users u
WHERE order_date BETWEEN '2018-08-01 00:00:00' and '2018-08-01 23:59:59' 
    AND NOT EXISTS (SELECT 1 FROM users WHERE users.userid = u.uid WHERE order_date BETWEEN '2018-08-02 00:00:00' AND '2018-08-02 23:59:59')

相关问题