2017-05-25 7 views
0

J'essaie d'obtenir la moyenne mobile par jour de la semaine, pour cela j'utilise sql query. dataframe estsqldf donne une erreur lors de l'utilisation de la sous-requête

data

et le code 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 ;") 

Cela donne erreur

Erreur dans rsqlite_send_query (conn @ ptr, déclaration): près de "(": erreur de syntaxe

whi le cela fonctionne de la simple sélection:

sqldf("select * from max_value_782") 

Répondre

2

Tenir compte remplaçant la méthode weekdays. que cette syntaxe suppose un qualificatif de table. Puisque par défaut sqldf utilise le dialecte SQLite, utilisez strftime pour comparer les jours de la semaine. En outre, les guillemets simples sont utilisés pour les littéraux de chaîne et ne pas inclure d'identificateurs de table/champ. SQLite peut utiliser des crochets, des guillemets ou des guillemets, ou aucun si les mots réservés/caractères spéciaux ne sont pas utilisés.

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

Notez que le point-virgule n'est pas nécessaire. –

+0

@Parfait merci :) – Soni007

+0

Pas de problème ... Content de vous aider. Codage heureux! – Parfait