Один подход, основанный на том, что я думаю, что вы ищете:
Создайте таблицу User_Session, содержащую FK User_ID, Start_Time и End_Time. Запишите новую строку в эту таблицу каждый раз, когда пользователь начинает и заканчивает сеанс. Вы можете получить эти User_ID и Start_Time при входе в систему и захватить End_Time после завершения сеанса или выхода пользователя из системы.
Теперь у вас есть историческая таблица с [1500 пользователей] x [количество сеансов в день], которую я бы назвал большим, но невообразимо таким. (Особенно если посмотреть, как он правильно проиндексирован и т. Д.) Вы можете выполнять запросы к этой таблице, что-то вроде SELECT User_ID, SUM (End_Time - Start_Time), так сказать, для любых диапазонов дат, которые вам нужны.
Чтобы контролировать размер таблицы, вы могли бы в свою очередь сохранить эти агрегированные значения (User_ID, MMYY, Num_Minutes) и обрезать исходную таблицу по некоторому заданному расписанию. Сохранение вычисленных полей может быть не предпочтительнее, чем иметь под рукой нормализованные данные. Поэтому, возможно, не идите по этому пути, пока не определите, что размер исходной таблицы является большой проблемой.
Просто один из многих способов, упрощенный ради ясности.