如何按不同月份从R中的数据库加载数据

How to load data from database in R by different month

我正在使用 RODBC 包从 R 中的数据库加载数据,并根据每月数据进行分析。

由于数据量很大,不能把所有的数据都加载到一起,所以我想的是逐月加载数据,然后使用循环进行分析,逻辑如下:

table <- sqlQuery(channel, 
               " select * from db where date between 'yyyy-mm-dd' and 'yyyy-mm-dd' ##this period is 1 month##
               "
                 , believeNRows=FALSE) 

####run function on table#####
####then load next month data and run function again#####

我的问题是如何使用循环加载下个月的数据并替换上个月的数据table,以及当月份数达到12时如何更改年份数。

感谢您的帮助,祝您生活愉快

这可能是一种方法:

dates <- seq(as.Date("2010-01-01"), by = "month", length.out = 13)
for (i in 1:(length(dates) -1)) {
  sqlQuery(channel, sprintf("select * from db where date between %s and %s;\n", dates[i],dates[i+1]), believeNRows=FALSE)
}

注意几件事: 首先,日期的顺序必须根据您的需要进行编辑,其次;查询一直持续到日期的倒数第二个元素(否则你会得到一个 NA(所以进入未来一个月)和第三个;如果你愿意,这将不会打印你发送的查询为此,请更改(或添加)以下命令:

cat(sprintf("select * from db where date between %s and %s;\n", dates[i],dates[i+1]))

在这种情况下,此输出(将 sqlQuery 切换为 cat 会产生以下结果(注意仅针对 SQL 语句的简化循环,而不是完整的 sqlQuery调用):

dates <- seq(as.Date("2010-01-01"), by = "month", length.out = 13)
for (i in 1:(length(dates) -1)) {
  cat(sprintf("select * from db where date between %s and %s;\n", dates[i],dates[i+1]))
}
#select * from db where date between 2010-01-01 and 2010-02-01;
#select * from db where date between 2010-02-01 and 2010-03-01;
#select * from db where date between 2010-03-01 and 2010-04-01;
#select * from db where date between 2010-04-01 and 2010-05-01;
#select * from db where date between 2010-05-01 and 2010-06-01;
#select * from db where date between 2010-06-01 and 2010-07-01;
#select * from db where date between 2010-07-01 and 2010-08-01;
#select * from db where date between 2010-08-01 and 2010-09-01;
#select * from db where date between 2010-09-01 and 2010-10-01;
#select * from db where date between 2010-10-01 and 2010-11-01;
#select * from db where date between 2010-11-01 and 2010-12-01;
#select * from db where date between 2010-12-01 and 2011-01-01;