【问题标题】:sqldf gives error while using subquerysqldf 在使用子查询时出错
【发布时间】:2017-10-26 09:26:03
【问题描述】:

我试图在工作日获得移动平均线,因为我正在使用 sql 查询。 数据框是

和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(conn@ptr, statement) 中的错误:“(”附近:语法错误

虽然它通过简单的选择起作用:

sqldf("select * from max_value_782")

【问题讨论】:

    标签: mysql r sqldf


    【解决方案1】:

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

    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;")  
    

    【讨论】:

    • 注意分号不是必须的。
    • 没问题...很高兴为您提供帮助。编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多