在rails-postgresql查询中计算时差



我需要在我的rails(有Postgres数据库(中获得时差作为查询结果

Brute Force Approach

我从数据库中查询了所有项目,然后迭代每个记录,然后以小时为单位计算时差,这非常慢。

1) @image_retouch_items = ImageRetouchItem.where(:status => '0') = Retrieved all data
2) @image_retouch_items.each do |retouch_item|
latency_date = ((Time.parse(DateTime.now.to_s) - Time.parse(retouch_item.created_at.to_s))/3600).round
end

Optimized

我需要计算查询本身的时间差(小时(,如何实现

like - ImageRetouchItem.where(:status => '0').select('(Time.parse(DateTime.now.to_s) - Time.parse(retouch_item.created_at.to_s))/3600).round')

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,得到小时数,并使用Postgresround()函数进行舍入。我继续使用::int将结果转换为整数,但这是可选的。

image_retouch_item对象现在将具有latency_date属性,该属性将包含以小时为单位的延迟,四舍五入到最接近的小时。

相关内容

  • 没有找到相关文章

最新更新