通过 R 查询 SQL 数据库,并返回特定列表

Querying SQL database through R, and returning a specific list

提问人:ambergris 提问时间:11/17/2023 更新时间:11/17/2023 访问量:38

问:

我必须通过 R 查询和 SQL 数据库,并且很难让它返回我需要的东西。基本上,数据库有“timeStamp”、“line”、“aggregate”、“name”、“location”和“topic”列。这是我尝试在时间范围内获取所有 UNIQUE 主题及其关联的列值的尝试:

con <- openConn()
query <- "SELECT DISTINCT topic, line, aggregate, name, location FROM doc.database
WHERE \"timeStamp"\ BETWEEN '2023-06-01 00:00:00' AND ' 2023-10-30 10:00:00'
GROUP BY topic"
topicsdf <- dbGetQuery(con, query)

但是,这会返回一个错误:

dbSendQuery(conn, statement, ...) 中的错误: 无法检索 JDBC 结果集 JDBC 错误:发送到后端时发生 I/O 错误。 陈述: SELECT DISTINCT 主题、行、聚合、名称、位置 FROM doc.database 其中“timeStamp”介于“2023-06-01 00:00:00”和“2023-10-30 10:00:00”之间

非常感谢这方面的帮助,因为我不熟悉这种类型的查询

sql r jdbc

评论

0赞 Tim Biegeleisen 11/17/2023
您的查询无效。请在之前和之后添加示例数据,以便有人可以提供有效的查询。
0赞 jarlh 11/17/2023
通常 GROUP BY 与 SELECT 相同的列,但作为聚合函数参数的列除外。
1赞 Tech Commodities 11/17/2023
没有数据就很难提供帮助。一个想法是,我倾向于使用该包来构造 SQL 查询,因为它通常更容易看到哪里不起作用,然后它可以生成 SQL 查询dbplyr
1赞 Tim Biegeleisen 11/17/2023
假设给定主题有 2 行。对于应该从这 2 行返回条记录,您的逻辑是什么?
1赞 Tim Biegeleisen 11/17/2023
此外,请使用您的实际 SQL 数据库(例如 MySQL、SQL Server、Oracle、Postgres 等)标记您的问题。

答:

1赞 Tim Biegeleisen 11/17/2023 #1

您的查询正在对主题执行操作,即要求 SQL 数据库为每个主题值返回一条记录。但是,查询还会选择其他列,而不是在聚合函数中。因此,不清楚应返回 、 、 或 的哪些值,因此此查询会在数据库上生成错误。GROUP BYlineaggregatenamelocation

您在评论中阐明了您的要求:

也许我可以为每个主题选择所有不同的列值组合?

在这种情况下,您可以尝试简单地删除子句并执行不同的选择:GROUP BY

con <- openConn()
query <- "SELECT DISTINCT topic, line, aggregate, name, location
          FROM doc.database
          WHERE \"timeStamp\" BETWEEN '2023-06-01 00:00:00' AND ' 2023-10-30 10:00:00'"
topicsdf <- dbGetQuery(con, query)