MySQL выбирает всех пользователей, которые не вошли в систему в течение 30 дней - PullRequest
2 голосов
/ 05 марта 2012

У меня есть таблица с идентификатором пользователя и отметкой времени, как показано ниже.

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

Я хочу вернуть список уникальных идентификаторов участников, которые не вошли в систему в течение 30 дней или дольше.

Это мой текущий запрос:

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

Я подумал, что это правильно, но по какой-то причине в работе идентификатор администратора отображается в списке, что невозможно, так как администратор регистрируется каждый день.

Ответы [ 3 ]

5 голосов
/ 05 марта 2012

Вместо жесткого кодирования времени отключения, попробуйте

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

Что касается вашей учетной записи администратора - когда обновляется временная метка входа?И есть ли особый случай, когда учетная запись администратора входит в систему?

4 голосов
/ 05 марта 2012

Как-то так должно работать.

SELECT member_id, MAX(login_timestamp)
FROM logins 
GROUP BY member_id
HAVING MAX(login_timestamp) <= 1329461087
ORDER BY MAX(login_timestamp) DESC
1 голос
/ 05 марта 2012

Вы можете взять всех пользователей и удалить тех, кто вошел в систему за последние 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))
)
...