Мне нужно получить среднее значение updated_at - created_at
столбцов datetime
Я пробовал этот путь, но он не работает, как я ожидал:
User.average('updated_at - created_at')
Он дает этот запрос sql:
SELECT AVG(updated_at-created_at) FROM 'users'
Когда я фильтрую по одному идентификатору, получая один объект, он показывает мне другой результат, чем user.updated_at - user.created_at
. Вот почему я думаю, что мой SQL-запрос неверен.
User.where(id: 3).average('updated_at - created_at').to_f => 29183.0
user = User.find(3) # (created_at: "2018-07-25 09:58:56", updated_at: "2018-07-25 12:50:39")
user.updated_at - user.created_at => 10303.0
Наконец, я нашел свой собственный ответ, используя TIME_TO_SEC
и TIMEDIFF
внутри AVG:
User.where(id: 3)
.average('TIME_TO_SEC(TIMEDIFF(updated_at, created_at))')
.to_f
=> 10303.0