【问题标题】:Post Increment date field in mySQL query using R使用 R 在 mySQL 查询中发布增量日期字段
【发布时间】:2019-03-14 08:44:45
【问题描述】:

我正在尝试使用 DBI R 包在我们的 mySQL 数据库中查询一个表。但是,我需要通过每月更改日期字段并将其限制为 1 从表中提取字段。

我遇到了循环和 sql 查询文本的问题。我想创建一个循环来更改日期(每月),然后将其打印到数据库查询中,然后提取与每月条件匹配的所有数据。

这是我目前的代码:

for (i in seq(0,12,1)){
 results <- dbGetQuery(myDB, paste("SELECT * FROM cost_and_price_period WHERE start_date <=", '01-[[i]]-2019'))
}

主要问题是 R 不承认像 ++ 这样的后增量运算符,所以我知道我可以只进行 12 个单独的查询然后 rbind 它们,但我更愿意做一个有效的查询。有没有人有任何想法?

【问题讨论】:

    标签: mysql r dbi r-package rmysql


    【解决方案1】:

    以下解决方案可以让您了解如何处理您的问题。

    虚拟表

       id names        dob
    1   1    aa 2018-01-01
    2   2    bb 2018-02-01
    3   3    cc 2018-03-01
    4   4    dd 2018-04-01
    5   5    ee 2018-05-01
    6   6    ff 2018-06-01
    7   7    gg 2018-07-01
    8   8    hh 2018-08-01
    9   9    ii 2018-09-01
    10 10    jj 2018-10-01
    11 11    kk 2018-11-01
    12 12    ll 2018-12-01
    13 13    ll 2018-12-01
    

    假设我们在 MySQL 中有上表。然后我们需要访问每个月的第一天的数据并将整个记录存储为一个数据框。

    ### Using for loop like from your question
    n <- 12
    df <- vector("list", n)
    
    for (i in seq(1:12)){
     df[[i]] <- data.frame(dbGetQuery(pool, paste0("SELECT * FROM dummyTable WHERE dob = '2018-",i,"-01';" ))) # in iteration `i` corresponds for month number
    }
    
    df <- do.call(rbind, df)
    ### Using lapply(preferred way)
    n <- seq(1:12)
    df <- lapply(n, function(x){
      dbGetQuery(pool, paste0("SELECT * FROM dummyTable WHERE dob = '2018-",x,"-01';" ))
      })
    df <- do.call(rbind, df)
    

    所以df 数据框的输出将给出来自 MySQL 的匹配记录。

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 2011-05-30
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多