gpt4 book ai didi

mysql - 获取另一个表中两个日期之间上次登录的所有用户

转载 作者:行者123 更新时间:2023-11-29 09:32:56 25 4
gpt4 key购买 nike

我想获取在两个特定日期之间最后登录的所有用户。如何才能做到这一点?

注意:我之所以这样做sub.updated_at是因为:

  1. 登录 session 可能会持续一天以上
  2. 相同的用户可以在不同的电脑上登录并启动辅助 session
  3. 我需要获取用户启动的最后一个 session ,然后检查其上次更新时间。

示例构建:http://sqlfiddle.com/#!9/39849/11

因此,从 sqlfiddle 的示例中,我希望查询选择 Bill,因为他的最后一条记录的 updated_at 介于 2019-09-15 之间00:00:002019-09-15 23:59:59John 的 条目之一也在这些日期之间进行了更新,但他的最新记录是在 2019-09-18 12:00:00 更新的,因此不应选择 John。

<小时/>

这是一个可能的解决方案,但我担心性能,索引 update_at 应该会产生积极的效果,但是如果我们有 100 万以上的用户以及更多的用户登录怎么办:

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 *
FROM (
SELECT *
FROM `user_logins`
WHERE `updated_at` BETWEEN '2019-09-15 00:00:00' and '2019-09-15 23:59:59'
ORDER BY `user_logins`.`id` DESC
) as sub
WHERE NOT EXISTS (
SELECT 1
FROM user_logins
WHERE user_id = sub.user_id
and updated_at > '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

Here是 fiddle 。

关于mysql - 获取另一个表中两个日期之间上次登录的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58303052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com