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

标签 mysql sql

我在 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/

相关文章:

sql - 单个 SSRS 报告中列出的多个报告是什么意思?

mysql - 如何在MYSQL中选择两种组合情况的结果?

sql - 使用 SQL MIN() 和 GROUP BY 的额外字段

mysql - 如何将 Rstudio 连接到 mysql 数据库的 AWS 实例?

MySQL 自动将字符串转换/转换为数字?

android - 应用程序Android Json Mysql : Error in http connection android. os.NetworkOnMainThreadException

php - 获取准备好的语句中最后插入的 ID

python - MariaDB/MySQL 在 Python 中插入/重复键更新

sql - Excel - 如何计数(*)和 groupby 类似于 SQL

mysql - 连接多个sql表以查找共同值