rmysql:sql语法错误无法识别

ma8fv8wu  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(298)

这是我上一个问题的延续。我在r中使用rmysql包向mysql数据库发送一个sql请求。错误说明语法有问题,但我找不到错误部分。有人能帮我纠正这个错误吗?
数据表如下所示:

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'

但我认为有一部分是没有问题的!我的语法怎么了?如果我加入一个 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
ioekq8ef

ioekq8ef1#

不清楚你想要什么。但是在 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' ,如果您想要五月所有日期的范围。

相关问题