【问题标题】:Select All users who has not logged their time in last 5 days in Mysql选择所有过去 5 天内未在 Mysql 中记录时间的用户
【发布时间】:2020-03-21 17:20:12
【问题描述】:

我有 2 个表(以 user_id 为基础加入);

1 = Task ( id, user_id,task_title,created_datetime)
2 = users  (id,name)

我想获取过去 5 天内未记录时间的所有用户的电子邮件。 提前致谢。

【问题讨论】:

标签: mysql sql datetime


【解决方案1】:

您可以如下使用子查询-

SELECT * FROM users  
WHERE ID IN (
    SELECT A.id
    FROM users A
    INNER JOIN Task B ON A.id = B.user_id
    GROUP BY A.id
    HAVING  MAX(created_datetime) < DATE_ADD(NOW(), INTERVAL -5 DAY)
)

【讨论】:

    【解决方案2】:

    如果您的表定义是这样的: 1 = 任务(id、user_id、task_title、created_datetime) 2 = 用户(ID、姓名、电子邮件) 并且您正在使用 created_datetime 来存储登录时间,那么以下查询应该可以工作:

    SELECT email FROM users  
    WHERE id not IN (
        SELECT distinct A.id
        FROM users A
        INNER JOIN Task B ON A.id = B.user_id
        where  A.created_datetime > DATE_ADD(NOW(), INTERVAL -5 DAY)
    )
    

    【讨论】:

      【解决方案3】:

      您可以尝试以下操作:

      SELECT a.*
      FROM users a
      INNER JOIN
          (SELECT *
           FROM (SELECT *
                 FROM task
                 ORDER BY created_datetime DESC) AS a
           GROUP BY a.user_id ) AS b
      ON a.id = b.user_id
      WHERE b.created_datetime < CURRENT_DATE - interval 5 day;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-22
        • 2013-07-08
        • 1970-01-01
        • 2013-12-29
        • 2015-03-29
        • 2020-12-24
        • 1970-01-01
        • 2014-08-07
        相关资源
        最近更新 更多