2015-07-28 54 views
0

我有以下問題。在Ruby on Rails中減去數據表的2個字段

我有一個表讓我們稱之爲Activity。

在該表中有3個字段一個是DATE_START,第二個是DATE_END和第三個是ACTIVITY_TYPE,其對應的時間,該活動的開始和結束,活動的例如類型體力活動和飲食。

我想查找activity_type持續的中位時間段。

例如:

Activity.where(activity_type: "Eating healthy") 

所以我想在這個問題上與DATE_STARTDATE_END之間的時間差來申請,一筆聲明。

我如何找到所有相同類型活動的時差?

回答

0

您可以使用SQL的​​3210函數查找每個日期值之間的天數。然後,您可以使用ActiveRecordaverage方法找出中位數/平均天數。

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函數。您將不得不查找可用於數據庫的適當日期差異函數。

+0

謝謝你Humza爲你的答案,問題是我使用SQLite,我不知道如何構造一個DATEDIFF與此。我看到strftime,但我有一些困惑。 – Ectoras

+0

SQLite的'julianday'函數將返回自特定日期以來的天數(可以查看它)。您可以減去每個日期的「julianday」值,然後找到結果的平均值。例如'Activity.group(:activity_type).average(「julianday(date_end) - julianday(date_start)」)。to_f' – Humza