我在 MySQL 中有两个表。
logs 表包含列:time、user_id、event_type
users 表有列:email, id
每次用户登录到生成日志文件的系统时,event_type 列值都会被记录为值“/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;
也不需要 outer join
——您在 where
标准中否定了它。如果要保留 outer join
并返回可能在 logs
表中没有匹配记录的用户,则将条件移动到 on
:
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;
关于mysql 使用 leftjoin 选择两个匹配行的最新时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38986249/