【问题标题】:Mysql: All users with no activity in last X daysMysql:过去 X 天没有活动的所有用户
【发布时间】:2014-11-11 16:01:12
【问题描述】:

好的,这里画个空白,搜索不成功。

  • 用户表:id、姓名、电子邮件
  • 活动表:id、时间戳、user_id

许多用户,一些有很多活动,一些很久以前,一些根本没有。 我希望所有用户 ID 在过去 30 天内没有活动(或者实际上根本没有活动)。在过去 30 天内存在某些时间戳的任何用户都将从结果中省略。

奖励问题,奖励独角兽眼泪:我如何将查询更改为更新匹配的用户行,例如设置列年龄=1

【问题讨论】:

    标签: mysql android-activity


    【解决方案1】:

    您可以使用 INTERVAL 和加号或减号运算符来计算 30 天前:CURDATE() - INTERVAL 30 DAY

    SELECT User.id
    FROM User
    LEFT JOIN Activity ON User.id = Activity.user_ID
    GROUP BY User.id
    HAVING MAX(Activity.timestamp) < CURDATE() - INTERVAL 30 DAY
        OR MAX(Activity.timestamp) IS NULL
    

    MAX(Activity.timestamp) IS NULL 应该照顾没有活动的用户。

    【讨论】:

    • 非常感谢。该死的,我正在接近选择 u.*, a.id, a.timestamp from user u left join activity a on u.id = a.user_id and max(a.timestamp)
    • Ed,这太棒了 - 但总是有更多(抱歉这么苛刻) - 你看过上面的编辑吗?
    • 哎哟 - 我对 UPDATE / JOIN 的事情很糟糕 :) 我能提供的唯一建议就是试试这个:UPDATE User SET aged = 1 WHERE id IN ( 上面的整个查询 ) .
    • 我也是,所以我问你!我也是这么想的,所以我们可能是对的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    相关资源
    最近更新 更多