首先,也是最重要的--谢谢你花时间看我的问题,不管你是否回答!
我试图使用R中的RODBC包创建一个循环遍历我的df和SQL中必要数据中的查询的函数,但是我在设置查询时遇到了问题,因为查询的参数在每次迭代中都会发生变化(下面的例子)
我的df看起来是这样的:
ID Start_Date End_Date
1 2/2/2008 2/9/2008
2 1/1/2006 1/1/2007
1 5/7/2010 5/15/2010
5 9/9/2009 10/1/2009如何在sql程序中指定开始日期和结束日期?
到目前为止,我的情况如下:
data_pull <- function(df) {
a <- data.frame()
b <- data.frame()
for (i in df$id)
{
dbconnection <- odbcDriverConnect(".....")
query <- paste("Select ID, Date, Account_Balance from Table where ID = (",i,") and Date > (",df$Start_Date,") and Date <= (",df$End_Date,")")
a <- sqlQuery(dbconnection, paste(query))
b <- rbind(b,a)
}
return(b)
}但是,这在任何情况下都不会查询。我相信这与我如何指定迭代的开始日期和结束日期有关。
如果有人能在这方面提供帮助,我们将不胜感激。如果您需要进一步的解释,请不要犹豫地问!
发布于 2019-01-03 20:39:28
当前的设置产生了几个语法问题:
df$ID中的原子ID值。在同一个循环中,您将把、df$Start_Date和df$End_Date的整个向量传递到查询连接中。TO_DATE(mydate, 'YYYY-MM-DD')。上述几个绩效/最佳做法问题:
rbind 构建一个数据帧列表。这样,您就可以避免任何循环或列表需要,方法是将数据帧保存为数据库表,然后将其连接到最终表,用于筛选后的join查询导入。这假设您的数据库用户拥有CREATE TABLE和DROP TABLE权限。
# CONVERT DATE FIELDS TO DATE TYPE
df <- within(df, {
Start_Date = as.Date(Start_Date, format="%m/%d/%Y")
End_Date = as.Date(End_Date, format="%m/%d/%Y")
})
# SAVE DATA FRAME TO DATABASE
sqlSave(dbconnection, df, "myRData", rownames = FALSE, append = FALSE)
# IMPORT JOINED AND DATE FILTERED QUERY
q <- "SELECT ID, Date, Account_Balance
FROM Table t
INNER JOIN myRData r
ON r.ID = t.ID
AND t.Date BETWEEN r.Start_Date AND r.End_Date"
final_df <- sqlQuery(dbconnection, q)https://stackoverflow.com/questions/54026026
复制相似问题