RMySQL: ошибка синтаксиса SQL неопознаваема - PullRequest
0 голосов
/ 29 июня 2018

Это продолжение моего предыдущего вопроса . Я использую пакет RMySQL в R для отправки SQL-запроса в базу данных MySQL. Ошибка говорит, что что-то не так с синтаксисом, но я не могу найти часть ошибки. Кто-нибудь может мне помочь исправить эту ошибку?

Таблица данных выглядит следующим образом:

organisation    Tour_ID             A           B           C           D  
Ikea                  a    2018-04-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  a    2018-06-01  2018-05-03  2018-05-29          NA   
Ikea                  a    2018-04-02  2018-05-01  2018-07-08  2018-05-26 
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b            NA  2018-05-05  2018-08-02  2018-06-01
Ikea                  c    2018-06-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  c    2018-06-01  2018-05-03          NA          NA   
Ikea                  c    2018-08-02  2018-05-09  2018-07-08  2018-05-26

И синтаксис, который я написал:

cond <- "SELECT t.* FROM myTable t JOIN  
                                   (SELECT organisation, Tour_ID, 
                                    FROM myTable WHERE organisation LIKE "Ikea"  
                                    GROUP BY organisation, Tour_ID 
                                    HAVING A >= \"2018-05-01 00:00\" AND 
                                           A < \"2018-05-31 00:00 \"
                                   ) tt ON 
                                     tt.Tour_ID = t.Tour_ID AND 
                                     tt.organisation = t.organisation"

dbGetQuery(conn = connection, statement = cond)

И сообщение об ошибке, которое я получаю:

Unknown column 'A' in 'having clause'

Но я не вижу проблем в части HAVING! Что не так с моим синтаксисом? Также, если я добавлю A в предложение SELECT, появится сообщение об ошибке:

Error in .local(conn, statement, ...) : 
could not run statement: Expression #3 of SELECT list is not in GROUP BY clause 
and contains nonaggregated column 'myTable.myTable.A' 
which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

1 Ответ

0 голосов
/ 29 июня 2018

Неясно, что вы хотите. Но столбцы в HAVING должны быть либо в GROUP BY, либо в качестве аргументов для агрегации. Возможно, вы хотите:

(SELECT organisation, Tour_ID
 FROM myTable WHERE organisation LIKE "Ikea"  
 GROUP BY organisation, Tour_ID 
 HAVING MIN(A) >= '2018-05-01' AND 
        MAX(A) < '2018-05-31'
) tt 

Для констант даты следует использовать одинарные кавычки. Я предполагаю, что вторая константа должна быть '2018-06-01', если вы хотите диапазон для всех дат в мае.

...