2016-04-27 19 views
0

私はRails APIのクエリを作成して、与えられた日付のセットに対して月に受け入れられるジョブアプリケーションの合計時間を返します。指定した日付のRuby on Railsクエリ

表:仕事、JobApplication

仕事は、多くのJobApplicationにあり

JobApplication

開始日マッチした場合、フィールドの状態 "SUCCESS" があります:2015年7月16日

を、それが持つことが可能ですそれは{7月16日、100日、8月16日:200、...}に戻りますか?

私はかなり混乱しています。どんな助けもありがとう。

このクエリは、日付範囲内の正常なジョブアプリケーションの数を示します。

JobApplication.where(status: "SUCCESS").("created_at < ? ", Jul 16).("created_at < ? ", Aug 15) 

JobApplication.job.durationは、そのジョブの時間数を示します。

私はそれらをまとめて日付をループする方法がわかりません。

私は結果を期待するようなものです:私はあなたの質問の権利を理解している場合

data = JobApplication.where(status: 'SUCCESS').group(:start_date).select('start_date, count(*), sum(duration) as sum') 

よう

{Jul 16: 100, Aug 16: 200, .... } 
+0

あなたのデータは何ですか?また、あなたは何を期待していますか?いくつかのサンプルデータを入れますか?あなたは何を試していますか? –

+0

こんにちはVishal、pls私の更新を参照してください –

答えて

1

ねえ、あなたがこの方法を試すことができます:sum

を設定するとこれは、おそらく純粋なSQLクエリを実行する方が簡単ですJobApplicationインスタンスを返します。

{Date => total_duration, :date => total_duration} 

希望する場合は、0123のような特定の形式に日付を変換できますだからgroup(DATE_FORMAT(created_at, "%m-%y"))と入力してください。 mysqlでタイムスタンプから時間部分を削除し、データを毎日返します

+0

PG :: InvalidDatetimeFormat:ERROR:タイムスタンプタイプの入力構文が無効です: "---!ruby/range –

+0

' PG'関連のdatetime関数を使用できます –

0

何かが、トリックを行う必要があります。

JobApplication.joins(:job).where(status: "SUCCESS").where(job_applications => {:created_at => [state_date..end_date]}).group(:created_at).sum("jobs.duration") 

は、それはあなたのような結果を返します:

SELECT start_date, count(*), sum(duration) FROM job_applications WHERE status LIKE 'SUCCESS' GROUP BY start_date 
+0

申し訳ありません私は1月の意味は、1月16日から16日に始まり、1日だけではなく、期間がジョブテーブルに含まれている、私は(ジョブ)を含める必要がありますか? –

関連する問題