繁体   English   中英

如何选择 MySql 中不存在的最后一个 dte

[英]How do I select the last dte in MySql WHERE NOT EXIST

如果用户在过去三个月内登录,我正在 PHP Web 应用程序中进行测试。 如果用户尚未登录,我会向用户发送提醒电子邮件。 我有一个可以工作的代码,除了代码选择数据库(MySql)中的第一个日期,而不是最后一个。

以下是一些示例数据:测试用户的所有登录日期:

在此处输入图片说明

SQL 选择第一个日期而不是最后一个日期:

在此处输入图片说明

我预计看到日期2020-06-21

这是我最后的代码尝试:

SELECT Client, IP, Date
FROM iplog ip1
WHERE NOT EXISTS (SELECT 1 FROM iplog ip2 
              WHERE ip1.Client = ip2.Client AND
                    ip2.Date >= DATE_SUB(NOW(), INTERVAL 3 MONTH)ORDER BY Date DESC)
                    GROUP BY Client
                    ORDER BY Date DESC
                    

聚合不是更简单吗?

select client, max(date) last_login_date
from iplog 
group by client
having max(date) <= now() - interval 3 month

这带来了在过去 3 个月内未登录的客户,以及他们上次登录的日期。

请注意,此查询无法识别从未登录的客户端(因为它们未出现在日志表中)。 在正常情况下,您会有一个单独的表来存储客户端,然后:

select c.*
from clients c
where not exists (
    select 1 from iplog l where l.client = c.client and l.date > now() - interval 3 month
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM