2017-05-25 70 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