Я пишу приложение на основе статистики из базы данных SQLite. Есть таблица, которая записывает, когда пользователи входят и выходят из системы (SessionStart, SessionEnd DateTimes).
Я ищу запрос, который может показать, сколько часов пользователь уже зарегистрировался, в виде линейного графика, так что между часами 12:00 и 1:00 утра там было 60 пользователей, вошедших в систему (в любой момент), в период с 1:00 до 2:00 было 54 пользователя, вошедших в систему, и т. д ...
И я хочу иметь возможность запустить СУММ этого, поэтому я не могу перенести записи в .NET и перебрать их таким образом.
Я придумал довольно примитивный подход, подзапрос для каждого часа дня, однако этот подход оказался медленным и медленным. Мне нужно иметь возможность рассчитать это для пары сотен тысяч записей за долю секунды ...
SELECT
case
when (strftime('%s',datetime(date(sessionstart), '+0 hours')) > strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+0 hours')) < strftime('%s',sessionend))
OR (strftime('%s',datetime(date(sessionstart), '+1 hours')) > strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+1 hours')) < strftime('%s',sessionend))
OR (strftime('%s',datetime(date(sessionstart), '+0 hours')) < strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+1 hours')) > strftime('%s',sessionend))
then 1 else 0 end as hour_zero,
... hour_one,
... hour_two,
........ hour_twentythree
FROM UserSession
Мне интересно, какой лучший способ определить, были ли замечены два DateTime в течение определенного часа (в лучшем случае, сколько раз он пересек час, если он регистрировался за несколько дней, но не обязательно)?
Единственная другая идея, которая у меня возникла, - это иметь специальную для этого таблицу «часов» и просто подсчитывать часы, которые пользователь видел во время выполнения, но я чувствую, что это скорее хак, чем предыдущий SQL. 1014 *
Любая помощь будет принята с благодарностью!