mysql选择与leftjoin匹配的两个匹配行的最新时间戳

时间:2016-08-17 00:04:16

标签: mysql sql

我在MySQL中有两个表。

日志表包含列:time,user_id,event_type

用户表包含以下列: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;

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

1 个答案:

答案 0 :(得分:3)

您可以使用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;