mysql使用leftjoin为两个匹配行选择最新时间戳

mysql使用leftjoin为两个匹配行选择最新时间戳,mysql,sql,Mysql,Sql,我在MySQL中有两个表 日志表包含以下列:时间、用户id、事件类型 users表有以下列:email、id 每次用户登录到生成日志文件的系统时,都会使用值“/dashboard”记录事件类型列值 这里的select语句将在他们每次登录时显示我的 SELECT users.email, logs.time FROM users LEFT JOIN logs ON users.id=logs.user_id WHERE logs.event_type LIKE '/dashboard' G

我在MySQL中有两个表

日志表包含以下列:时间、用户id、事件类型

users表有以下列:email、id

每次用户登录到生成日志文件的系统时,都会使用值“/dashboard”记录事件类型列值

这里的select语句将在他们每次登录时显示我的

SELECT users.email, logs.time 
FROM users 
LEFT JOIN logs ON users.id=logs.user_id 
WHERE logs.event_type LIKE '/dashboard' 
GROUP BY email, time;

…但我想返回一个结果集,该结果集仅显示每个用户第一次登录时的电子邮件地址和时间戳。

您可以使用
min

SELECT users.email, min(logs.time)
FROM users 
    INNER JOIN logs ON users.id=logs.user_id 
WHERE logs.event_type LIKE '/dashboard' 
GROUP BY email;
也不需要
外部联接
——您在
where
标准中否定了这一点。如果要保留
外部联接
并返回在
日志
表中可能没有匹配记录的用户,请将条件移动到上的

SELECT users.email, min(logs.time)
FROM users 
    LEFT JOIN logs ON users.id=logs.user_id 
        AND logs.event_type LIKE '/dashboard' 
GROUP BY email;

你的回答中提供的两个例子都很有魅力,谢谢!内部连接只需3秒即可执行,而左侧连接只需1分28秒。我感谢你的快速帮助!