Напиши SQL-запрос для вычисления суммарного времени онлайн пользователя за месяц из таблицы логов активности.
Для вычисления суммарного времени онлайн пользователя за месяц из таблицы логов активности необходимо знать структуру таблицы. Предположим, что таблица называется `activity_logs` и содержит следующие поля:
— `user_id` — идентификатор пользователя
— `login_time` — дата и время входа (DATETIME или TIMESTAMP)
— `logout_time` — дата и время выхода (DATETIME или TIMESTAMP)
**Базовый SQL-запрос (MySQL / PostgreSQL):**
sql
SELECT
user_id,
DATE_FORMAT(login_time, ‘%Y-%m’) AS month,
SUM(TIMESTAMPDIFF(SECOND, login_time, logout_time)) AS total_online_seconds,
SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, login_time, logout_time))) AS total_online_time
FROM activity_logs
WHERE login_time >= ‘2024-01-01’
AND login_time = ‘2024-01-01’
AND login_time < '2024-02-01'
AND logout_time IS NOT NULL
GROUP BY user_id, TO_CHAR(login_time, 'YYYY-MM')
ORDER BY user_id;
**Если нужно получить данные за текущий месяц динамически (MySQL):**
sql
WHERE YEAR(login_time) = YEAR(CURDATE())
AND MONTH(login_time) = MONTH(CURDATE())
**Советы по оптимизации:**
— Добавьте индекс на поля `user_id` и `login_time` для ускорения выборки.
— Если сессии могут переходить через полночь, рассмотрите дополнительную логику разбивки сессий по дням.
— При отсутствии `logout_time` можно использовать `COALESCE(logout_time, NOW())` для подсчёта незакрытых сессий.
**Строка для CSV:**
`user_id,month,total_online_seconds,total_online_time`
