У меня есть модели UserSession, которые записывают столбцы date_action и last_action datetime,
Я хочу знать, сколько времени пользователь провел в приложении - это сумма разницы между этими двумя значениями (игнорируя значения с Null last_action).
К сожалению, агрегатные функции django ORM работают только с одним столбцом, поэтому ради эффективности (может быть тысячи сессий на пользователя) я написал это в необработанном SQL, но, поскольку получил несколько больших чисел, я сравнил их с питоном сумма. Я не знаю почему, но два вычисления не показывают одинаковый результат, вы можете помочь мне разобраться?
Python:
sum(((us.last_action - us.first_action) for us in UserSession.objects.filter(user_id=1234) if us.last_action), datetime.timedelta(0))
SQL:
select sum(last_action - first_action) as total_time from usersession where user_id = 1234 and last_action is not null;