Мне нужно получить список пользователей, которые вошли в систему за последние 7 дней, и счет, который они зарегистрировали, учитывая следующие таблицы (сокращенные для простоты):
+-------------------+ +-----------------------------+
| users | | event_logs |
+-------------------+ +-----------------------------+
| id | name | | user | event | created_at |
+-------------------+ +-----------------------------+
| 1 | Jake | | 1 | login | date |
| 2 | Jenny | | 2 | login | date |
| 3 | Polly | | 2 | login | date |
+-------------------+ | 2 | login | date |
| 1 | login | date |
| 3 | login | date |
| 3 | login | date |
| 1 | login | date |
+-----------------------------+
До сих пор мне удалось присоединиться к двум таблицам и получить доступ к строкам входа, но результаты содержат дубликаты и без учета.
SELECT u.name, e.created_at
FROM event_logs e
INNER JOIN users u ON e.user = u.id
WHERE e.event = "login"
AND DATE(e.created_at) >= DATE_ADD(CURDATE(), INTERVAL -7 DAY)
ORDER BY u.id;
Поэтому я попытался сделать подзапрос, но запустил select * FROM (<<THAT QUERY ABOVE>>) logins;
возвращает синтаксическую ошибку:
Во-первых, значение должно быть обернуто одиночной цитатой. Вам также не нужен подзапрос, чтобы подсчитать количество экземпляров, в которые пользователь вошел. Вы можете напрямую использовать COUNT()
и GROUP BY
.
SELECT u.name,
COUNT(e.created_at) AS TOTAL_COUNT
FROM event_logs e
INNER JOIN users u ON e.user = u.id
WHERE e.event = 'login'
AND DATE(e.created_at) >= DATE_ADD(CURDATE(), INTERVAL -7 DAY)
GROUP BY u.name
GROUP BY
. Вы можете найти множество постов здесь в SO, демонстрирующих функциональностьGROUP BY
.