2013-10-20 386 views
0

我一直在盯着我的代码一个多小时,我仍然无法弄清楚我的查询有什么问题。 我收到错误消息: 的ActiveRecord :: StatementInvalid:PG ::语法错误:错误:语法错误或接近 “)” 38行:??WHERE(?ABS(AX2 - )/ <)如何使用sql查找并绑定?

query = %Q{ 

    SELECT 

    avg(ax2), 
    avg(ay2), 
    avg(az2) 

    FROM (

    SELECT 
     avg(t1) as t2, 
     avg(n1) as n2, 
     avg(ax1) as ax2, 
     avg(ay1) as ay2, 
     avg(az1) as az2 

    FROM ( 

     SELECT 
     avg(t) as t1, 
     avg(n) as n1, 
     avg(ax) as ax1, 
     avg(ay) as ay1, 
     avg(az) as az1 

     FROM obds 
     WHERE uid = #{uid} AND (ev = 6011 or ev = 6012) 
     GROUP BY 
     round(t,3), 
     round(n,3) 
    ) 

    AS derivedTable1 
    GROUP BY round(t1 + 0.0005,3), round(n1 + 0.0005,3) 
) 
    AS derivedTable2 
    WHERE (abs(ax2 - ?)/? < ?) #<<<<< Line with error 
} 

binds = [ uid, x_average, x_average, THRESHOLD_FOR_RESTING ] 
result = Ozd.find_by_sql query, binds 

回答

0

的答案是,查询必须分开绑定数组。

binds = [ query, uid, x_average, x_average, THRESHOLD_FOR_RESTING ] 
results = Ozd.find_by_sql binds 
0

试试这个WHERE (abs((ax2 - ?)/? < ?))代替

+0

hey did that worked? –

+0

你为什么要把小于参数放在abs值函数中? –

+0

oops,可能b我理解错了.. –