mysql查询中使用r的post increment date字段

yqlxgs2m  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(453)

我正在尝试使用dbir包查询mysql数据库中的一个表。但是,我需要通过每月更改date字段并将其限制为1来从表中提取字段。
循环和sql查询文本有问题。我想创建一个循环来更改日期(每月),然后将其打印到数据库查询中,然后该查询将提取与每月条件匹配的所有数据。
这是我目前的代码:

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

主要的问题是r不支持像++这样的后增量运算符,所以我知道我可以只进行12个单独的查询,然后rbind它们,但是我更喜欢执行一个高效的查询。有人有什么想法吗?

mitkmikd

mitkmikd1#

下面这个解决方案可以给你一个如何处理你的问题的想法。
傻瓜桌

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

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

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

so输出 df 数据框将给出mysql中匹配的记录。

展开查看全部

相关问题