Mysql 在另一个表中抓取上次在两个日期之间登录的所有用户
我想抓取在两个特定日期之间最后一次登录的所有用户。如何做到这一点 注意:我之所以在更新sub.u,是因为:Mysql 在另一个表中抓取上次在两个日期之间登录的所有用户,mysql,Mysql,我想抓取在两个特定日期之间最后一次登录的所有用户。如何做到这一点 注意:我之所以在更新sub.u,是因为: 登录会话可能持续一天以上 相同的用户可以登录到不同的pc并启动辅助会话 我需要获取用户启动的最后一个会话,然后检查它上次更新的时间 示例构建: 因此,从sqlfiddle上的示例中,我希望查询选择Bill,因为updated_at,对于他的最后记录,是在2019-09-15 00:00:00和2019-09-15 23:59:59之间。在这两个日期之间,John的一个条目也被更新,但他的最
Bill
,因为updated_at
,对于他的最后记录,是在2019-09-15 00:00:00
和2019-09-15 23:59:59
之间。在这两个日期之间,John的一个
条目也被更新,但他的最新记录是在2019-09-18 12:00:00
更新的,因此不应选择John
这是一个可能的解决方案,但我担心性能,索引
update\u at
应该会有积极的效果,但是如果我们有超过1mil的用户和更多的用户登录,会怎么样
SELECT *
FROM
(
SELECT *
FROM (
SELECT *
FROM `user_logins`
WHERE `updated_at` >= '2019-09-15 00:00:00'
ORDER BY `user_logins`.`id` DESC
) as sub
GROUP BY `sub`.user_id
) as sub
WHERE `sub`.updated_at BETWEEN '2019-09-15 00:00:00' and '2019-09-15 23:59:59'
您的查询可以简化为-
SELECT U.*, UL.*
FROM users U
JOIN user_logins UL ON U.id = UL.user_id
JOIN (SELECT user_id, MAX(updated_at) updated_at
FROM user_logins
GROUP BY user_id) UL2 ON UL2.updated_at = UL.updated_at
AND UL2.user_id = UL.user_id
WHERE DATE(UL2.updated_at) BETWEEN DATE('2019-09-15 00:00:00') AND DATE('2019-09-15 23:59:59')
ORDER BY UL.id DESC
是小提琴。请用相关的、最少的示例数据来构建SQL问题,以显示您的需求和相应的预期输出。请阅读此链接:此查询获取单个用户,我需要获取符合条件的所有用户。因此,从fiddles示例中,如果我要使用您的查询(不包括限制),如果更新时间在
2019-09-15 00:00:00
和2019-09-15 23:59:59
之间,我将同时选择Tim和John。我更新了查询,而不仅仅是Tim@user3402600。请现在试一试。这是最新的提琴-感谢Ankit,但是,您的查询仍然选择John。您在评论中看到提琴了吗?它完美地选择了这两个记录。
SELECT U.*, UL.*
FROM users U
JOIN user_logins UL ON U.id = UL.user_id
JOIN (SELECT user_id, MAX(updated_at) updated_at
FROM user_logins
GROUP BY user_id) UL2 ON UL2.updated_at = UL.updated_at
AND UL2.user_id = UL.user_id
WHERE DATE(UL2.updated_at) BETWEEN DATE('2019-09-15 00:00:00') AND DATE('2019-09-15 23:59:59')
ORDER BY UL.id DESC