sqldf выдает ошибку при использовании подзапроса

Я пытаюсь получить скользящее среднее по будним дням, для этого я использую sql-запрос. Dataframe - это

данные

и код 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")

person Soni007    schedule 25.05.2017    source источник


Ответы (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;")  
person Parfait    schedule 25.05.2017
comment
Учтите, что точка с запятой не нужна. - person G. Grothendieck; 26.05.2017
comment
Нет проблем ... Рад помочь. Удачного кодирования! - person Parfait; 26.05.2017