2016-06-17 4 views
0

여기에 오류 또는레일 4 개 포스트 그레스 쿼리 오류

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. 8. A->B~AvB임을 기억하십시오.

+0

나는 이것이 내가 찾고있는 것이라고 느낍니다. 나는 그것을 연결하고 그것이 어떻게되는지 알려줄 것이다. –

+0

매력처럼 작동했습니다. 폴 감사합니다! –

0

귀하의 4 번째 라인은 WHERE 키워드를 포함 할 수 없습니다 WHERE 근처에 오류가 돌아 오면, 내 코드입니다. 당신의 의도과 같이, 나머지 다른 기준을 추가하는 경우 AND로 교체해야합니다

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

+0

두 번째'AND'는 그 기간 내에 닫히고 8'ON'의 status_id와 만기일을 오늘 전에 포함하도록 설정합니다 ... 맞습니까? 나는이 기간과'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 인 경우에만 포함 시키십시오. –