如何在R中循环许多SQL查询?

时间:2016-02-11 22:11:51

标签: 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 between '20150101' and '20150131'
                   AND org_cd= '##########'
                   ORDER BY column_2, column_1 desc;"
                   ))

我需要在2014年和2015年的每个月执行此查询。这是针对该一个org_cd值的24个查询,并且总共有3个org_cd我需要运行该系列查询,总计72个查询。我试图找出如何使用此查询创建一个循环可以循环通过2014年和2015年的每个月,并希望对每个剩余的org_cd值重复该循环。

在我搜索的堆栈帖子和谷歌搜索结果中,看起来好像我可能需要做一个“for循环”。但我不知道如何根据我对R(初学者)的知识水平制作复杂的东西 无论如何,我在考虑:

for (daterange in c('20140101 and 20140131', '20140201 and 20140231',...,'20151201 and 20151231')){
NameMMMYY <- sqlQuery(connection_name, paste("SELECT column_1,
                   column_2 FROM DBname.dbo.tablename
                   Where column_cd= 'ZZZ' 
                   and column_date between 'daterange'
                   AND org_cd= '##########'
                   ORDER BY column_2, column_1 desc;"
                   ))} 

但是,我不知道如何在每个月的查询结果中包含一个名称(NameMMMYY)作为循环代码的一部分。此外,我会错过日期范围内的内部撇号,因为SQL需要在每个日期附近引用,而不是日期范围。

我很确定我不打算对查询进行并行化或参数化,尽管在任何一个计数中我都肯定是错的。除此之外,似乎其他帖子处理不同类型的SQL和/或不同的包。

总而言之,我想知道如何循环此查询72次,因为不同的月/年和org_cds,以及如何为每个查询结果命名,所以我不会意外地将所有查询结果丢弃成一个名字。这可行吗?

即使我必须只选择一个,循环日期或循环org_cd,它总比没有好。如果出现这种情况,我会选择日期循环。

1 个答案:

答案 0 :(得分:0)

怎么样?
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))