我有一个有用户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显示在列表中,这是因为管理员每天都会记录。
答案 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))
)