如何在R中循环许多SQL查询?
我正在使用R Studio,使用RODBC包访问SQL Server 2012,我将运行以下SQL查询:如何在R中循环许多SQL查询?,sql,sql-server,r,loops,Sql,Sql Server,R,Loops,我正在使用R Studio,使用RODBC包访问SQL Server 2012,我将运行以下SQL查询: NameJan15 <- sqlQuery(connection_name, paste("SELECT column_1, column_2 FROM DBname.dbo.tablename Where column_cd= 'ZZZ' and column_date
NameJan15 <- sqlQuery(connection_name, paste("SELECT column_1,
column_2 FROM DBname.dbo.tablename
Where column_cd= 'ZZZ'
and column_date between '20150101' and '20150131'
AND org_cd= '##########'
ORDER BY column_2, column_1 desc;"
))
NameJan15怎么样
library(lubridate)
begin <- (ymd("2014-01-01") + days(1)) %m+% months(0:23) + days(-1)
end <- (ymd("2014-01-31") + days(1)) %m+% months(0:23) + days(-1)
queries <- paste("SELECT column_1,
column_2 FROM DBname.dbo.tablename
Where column_cd= 'ZZZ'
and column_date between '", begin, "' and '", end, "
AND org_cd= '##########'
ORDER BY column_2, column_1 desc;")
res <- lapply(queries, FUN=function(x) sqlQuery(connection_name, x))
库(lubridate)
开始为什么不运行一个查询,返回所有72个案例所需的数据,然后再进行数据拆分?运行单独的查询需要大量额外的开销。我同意@Alex的观点。事实上,您不需要运行迭代查询所需的任何聚合。现在,如果df是一个非常大的批量负载,那么重复查询可能是有保证的。否则,只需在R中切片大DF,也可以考虑使用月份。SQL Server使用DatePart()
和Month()
函数。您将避免在2月31日声明不存在@Alex我将首先运行大查询,然后像您所说的那样尝试将其拆分。@Parfait日期的格式为(char(8),null)。如果我碰巧在搜索中包含20150231,它会不会在2月28/29日之前返回所有内容?请注意,使用此解决方案,res
将生成数据帧列表。
library(lubridate)
begin <- (ymd("2014-01-01") + days(1)) %m+% months(0:23) + days(-1)
end <- (ymd("2014-01-31") + days(1)) %m+% months(0:23) + days(-1)
queries <- paste("SELECT column_1,
column_2 FROM DBname.dbo.tablename
Where column_cd= 'ZZZ'
and column_date between '", begin, "' and '", end, "
AND org_cd= '##########'
ORDER BY column_2, column_1 desc;")
res <- lapply(queries, FUN=function(x) sqlQuery(connection_name, x))