Postgres может сделать это для вас очень легко, используя свой внутренний current_timestamp
:
ImageRetouchItem.where(:status => '0')
.select("*, round(extract(epoch from(current_timestamp - created_at)) / 3600)::int as latency_date")
current_timestamp - created_at
вернет интервал.Извлекая epoch
из этого интервала, мы конвертируем его в число секунд, которое затем делим на 3600, чтобы получить часы и округления, используя функцию Postgres round()
.Я пошел вперед и отлил результат как целое число, используя ::int
, но это необязательно.
Объекты image_retouch_item теперь будут иметь атрибут latency_date
, который будет содержать задержку в часах, округленную до ближайшего часа.