【问题标题】:apply or For loop in SQL query in R在 R 中的 SQL 查询中应用或 For 循环
【发布时间】:2017-07-14 20:48:38
【问题描述】:

问题-

如何使用 apply 函数或 for 循环在下面对不同的值运行此查询

运行查询

dbgetQuery(conn, " SELECT ID , Name , Date , Product 
                   FROM table xyz
                   where Year = i ")

其中 i 是年(2010 年到 2016 年)

如何获得 table.2011 = 2011 年的数据(ID、姓名、日期、产品) table.2012 = 2012 年的数据(ID、姓名、日期、产品) 等等..每年。

【问题讨论】:

  • 您使用的是什么类型的数据库? (这推动了如何进行参数化查询,因为 DBI 中的所有数据库都不同。)关于“data.frames 列表”的 SO 有很多问题,它们在这里非常合适:因为dbGetQuery 应该返回数据。框架,方法将是相同的。 (这是一个强烈的建议反对拥有table.2011table.2012,而不是使用list的data.frames。)
  • 确定如何在这个问题中获取 data.frames 列表。 SQL 数据库,通过 JDBC 连接
  • sapply(2010:2016, function(i) dbGetQuery(conn, "..."))。您不应该将值直接插入到查询字符串中,而应该使用parameterized queries。不幸的是,所有数据库的做法都不同RPostgres 使用 $1RSQLite 使用 :varnameRSQLServer 使用 ?1 等。您说 "SQL Db" 对缩小范围没有任何帮助。 “您使用的是什么类型的数据库?”(续...)
  • 就处理 data.frames 列表而言,也许这会有所帮助:stackoverflow.com/questions/29721283/…

标签: sql r for-loop apply rodbc


【解决方案1】:
year <- factor(c(2010,2011,2012,2013,2014,2015,2016))

for(i in levels(year))

{

assign(paste0('table.',i),dbgetQuery(conn, paste("SELECT ID , Name , Date , Product FROM table xyz where Year = '",i,"';")))

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多