0

以下に示すカスタム SQL 文字列 (postgres データベースを使用) を使用する Rails アプリがあります。その文字列は正常に機能します。過去 7 日以内に作成された answer_votes、best_answers、および投稿からのみレコードを取得するように、クエリに時間条件を追加しようとしています。したがって、今日の日付を取得し、7 日を減算します。

date = Date.today - 7

以下のSQL文字列のステートメントをこのようなものに置き換えました

(select Coalesce(sum(value),0) from answer_votes  where (answer_votes.user_id = users.id) AND (answer_votes.created_at <= #{date}))

しかし、それは私にいくつかのエラーを与えています

PG::Error: ERROR: operator does not exist: timestamp without time zone <= integer

これを行う正しい方法を教えてもらえますか。answer_votes の試行のみを示しましたが、best_answers と貢献についても同じことを試みますが、解決策は同じになります (推測します)。

sql_string = "with cte_scoring as (
  select
    users.id, users.name, users.email,
    (select Coalesce(sum(value),0) from answer_votes  where answer_votes.user_id = users.id) +
    (select Coalesce(sum(value),0) from best_answers  where best_answers.user_id = users.id) +
    (select Coalesce(sum(value),0) from contributions where contributions.user_id = users.id) total_score
  from
    users join
    contacts on (contacts.user_id = users.id)
  where
    users.lawyer         = 'true')   

select   id,
         name,
         email,
         total_score
from     cte_scoring
order by total_score desc
limit    2 "
4

1 に答える 1

1

この目的のために、組み込みの Postgres 関数を使用できます。

where . . . created_at <= Current_Date - interval '7 day'

変数置換で何か問題が発生している可能性があります。おそらく、日付変数を一重引用符で囲む必要があります。ただし、データベース内でこれを行う方が簡単です。

于 2013-05-27T17:08:30.593 に答える