2016-06-17 9 views
0

はここでエラーがでたりRailsの4つのPostgresのクエリエラー

first_of_month = Date.current.beginning_of_month 
last_of_month = Date.current.end_of_month 
today = Date.current 
query = quotes.where('close_date BETWEEN ? AND ? AND status_id = 8 WHERE quote_exp < ? ', first_of_month, last_of_month, today) 

query.sum(:total) 
+0

なぜ 'where()'関数内に 'WHERE'節がありますか? – Nicarus

答えて

1

ご説明のコメントをもとに、あなたはこのようなクエリ書くことができます:あなたを与えるだろう

query = query.where(<<-EOQ, first_of_month, last_of_month, today) 
    close_date BETWEEN ? AND ? 
    AND (quote_exp >= ? OR status_id = 8) 
EOQ 

は:(1)月からすべてが(2)有効期限が切れているか持っていませんか8. A->B~AvBであることを覚えておいてください。

+0

これは私が探しているものです。私はそれを差し込み、それがどのように進むのかを教えてくれるでしょう。 –

+0

チャームのように働いた。ありがとうポール! –

0

あなたの第四行はWHEREキーワードを含むべきではない場所の近くにエラーで戻ってくる、私のコードです。あなたの意図がそうのように、残りの部分に他の基準を追加することである場合は、ANDに置き換える必要があります。

query = quotes.where('close_date BETWEEN ? AND ? AND status_id = 8 AND quote_exp < ? ', first_of_month, last_of_month, today)

+0

あなたの2番目の 'AND'は、その期間内に閉じているstatus_idが8の' AND'と今日より前の有効期限...右だけを含むように設定しますか?私は期間と 'if'の間にすべてを選択しようとしています。今日までに期限切れのものがある場合は、' status_id = 8'を持つ場合にのみ含めるようにします。 –

0

は、あなたがより良い、このようにそれを書くことができます。

query = quotes.where(close_date: first_of_month..last_of_month, status_id: 8).where('quote_exp < ?', today).sum(:total) 
+0

期間の終わりにすべての引用符を選択しようとしています今日より前に有効期限が切れている場合は、status_id = 8の場合にのみ含めるようにしてください。 –