MySQL选择所有未登录30天的用户

时间:2012-03-05 02:24:06

标签: mysql sql unix-timestamp

我有一个有用户ID&时间戳,如下所示。

[member id] [timestamp]
1            1142461087
1            1339461211
2            1321280124
1            1249042100
3            1308325002
3            1308259235

我想返回一个未登录30天或更长时间的唯一成员ID列表。

这是我目前的查询:

SELECT member_id, login_timestamp
  FROM logins 
  WHERE login_timestamp <= 1329461087
  GROUP BY member_id
  ORDER BY login_timestamp DESC

我认为这是正确的,但出于某种原因,在生产中,管理员用户的ID显示在列表中,这是因为管理员每天都会记录。

3 个答案:

答案 0 :(得分:5)

不要对截止时间进行硬编码,而是尝试

SELECT ...
FROM ...
WHERE login_timestamp <= UNIX_TIMESTAMP((NOW() - INTERVAL 30 DAY))
...

至于您的管理员帐户 - 登录时间戳何时更新?当管理员帐户登录时是否有特殊情况?

答案 1 :(得分:4)

这样的事情应该有效。

SELECT member_id, MAX(login_timestamp)
FROM logins 
GROUP BY member_id
HAVING MAX(login_timestamp) <= 1329461087
ORDER BY MAX(login_timestamp) DESC

答案 2 :(得分:1)

您可以接管所有用户并删除过去30天内已登录的用户。结果将是那些在过去30天内没有登录的用户:

select distinct t1.id
from t t1
where not exists (
  select * from t t2
  where t1.id = t2.id and 
  timestamp >= unix_timestamp((curdate() - interval 30 day))
)
相关问题