2017-05-25 67 views
0

我正在尝试使移动平均值到星期几,因为我正在使用sql查询。 据帧是sqldf在使用子查询时给出错误

data

和sqldf代码:

ma_782 = sqldf("SELECT 
     t1.Id_indicator, t1.Hour, 
( 
    select SUM(t2.Value)/COUNT(t2.Value)         
    FROM max_value_782 AS t2 
    WHERE 
     t1.Hour = t2.Hour and 
      weekdays.Date(t1.Date) = weekdays.Date(t2.Date) 
      and DATEDIFF(t1.Date, t2.Date) BETWEEN 1 AND 42   
) AS 'MA_by_weekday' 
FROM max_value_782 AS t1 ;") 

这给了错误的rsqlite_send_query

错误(康涅狄格州@ PTR,语句):近 “(”:语法错误

whi它适用于简单的选择:

sqldf("select * from max_value_782") 

回答

2

考虑替换weekdays.方法,因为此语法假定表限定符。由于默认情况下,sqldf使用SQLite方言,请使用strftime来比较工作日。此外,单引号用于字符串文字,不包含表/字段标识符。 SQLite可以使用括号,反引号或双引号,如果不使用保留字/特殊字符,则可以使用none。

ma_782 = sqldf("SELECT t1.Id_indicator, t1.Hour, 
         (SELECT AVG(t2.Value) 
          FROM max_value_782 AS t2 
          WHERE t1.Hour = t2.Hour 
          AND strftime('%w', t1.Date) = strftime('%w', t2.Date) 
          AND (t2.Date - t2.Date) BETWEEN 1 AND 42   
         ) AS MA_by_weekday 
       FROM max_value_782 AS t1;") 
+1

请注意,不需要分号。 –

+0

@Parfait谢谢:) – Soni007

+0

没问题...很高兴帮助。快乐的编码! – Parfait