Джанго - Совокупная сумма разницы между столбцом даты и времени - PullRequest
1 голос
/ 18 сентября 2011

У меня есть модели 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;

1 Ответ

1 голос
/ 19 сентября 2011

Я обнаружил проблему - я не знаю, что вычитание одной даты из другой делает в mysql, но это было не то, что я хотел.

Правильный запрос SQL:

select sum(timestampdiff(SECOND, first_action, last_action )) as total_time  from usersession where user_id = 123 and last_action is not null

теперь результат sql совпадает с результатом python - без переноса всех сессий в память.

...