我有以下问题。
我有一个表叫做活动。
在此表中有3个字段,一个是 date_start ,第二个是 date_end ,第三个是 activity_type ,它们对应于活动开始和结束的日期以及活动的类型,例如身体活动和饮食。
我想找到activity_type持续的中位时间段。
例如:
Activity.where(activity_type: "Eating healthy")
所以我想在这个问题中应用一个总结陈述,其中包含 date_start 和 date_end 之间的时差。
如何找到所有相同类型活动的时差?
答案 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
函数。您必须查找可用于数据库的相应日期差异函数。