在Ruby on Rails中减去数据表的2个字段

时间:2015-07-28 10:15:14

标签: sql ruby-on-rails ruby sqlite

我有以下问题。

我有一个表叫做活动。

在此表中有3个字段,一个是 date_start ,第二个是 date_end ,第三个是 activity_type ,它们对应于活动开始和结束的日期以及活动的类型,例如身体活动和饮食。

我想找到activity_type持续的中位时间段。

例如:

Activity.where(activity_type: "Eating healthy")

所以我想在这个问题中应用一个总结陈述,其中包含 date_start date_end 之间的时差。

如何找到所有相同类型活动的时差?

1 个答案:

答案 0 :(得分:0)

您可以使用SQL的DATEDIFF函数查找每个日期值之间的天数。然后,您可以使用ActiveRecord的{​​{3}}方法查找中位数/平均天数。

condition = {activity_type: "Eating healthy"}
sql_string = "DATEDIFF(day, date_end, date_start)"
Activity.where(condition).average(sql_string) #=> numeric value

您可以通过对行进行分组来获取所有活动类型的数据,如下所示:

Activity.group(:activity_type).average(sql_string) #=> Hash with numeric values

但这也取决于您使用的数据库。例如,SQLite不存在DATEDIFF函数。您必须查找可用于数据库的相应日期差异函数。