现有表 login_log 登录记录,login_time:登录时间, user_id:用户id, login_ip:登录ip, log_id:自增id, project_id:登录站点。

现在需要获取user_id=(1,3,9,20,1000) 内的会员首次登录的详细信息。

请确保在 project_id、user_id、login_time 等字段上有合适的索引。

语法1:(有问题)

SELECT `log_id`,`user_id`, MIN(`login_time`) AS `min_login_time`,`login_ip`
FROM `login_log `
WHERE `user_id` IN (1,3,9,20,1000)
GROUP BY `user_id`

原因:

非聚合列:在GROUP BY查询中,除了分组列(user_id)和聚合函数(MIN(login_time))外,其他列(如log_id, login_ip)的值在分组内是未定义的。

你不能保证这些列返回的是与MIN(login_time)相对应的记录。

语法2:

SELECT `user_id`, MIN(`login_time`) AS `min_login_time`,`login_ip`
FROM `login_log `
WHERE `user_id` IN (1,3,9,20,1000)
GROUP BY `user_id`

作者 admin

百度广告效果展示