【问题标题】:Date Loop Query in R using DBI使用 DBI 在 R 中进行日期循环查询
【发布时间】:2019-01-05 13:32:08
【问题描述】:

我有一个问题

library(DBI)
res = dbSendQuery(con,
       "select 
        X, Y, z from table where date between date'2018-07-01' - interval '31' day and date'2018-07-01 - interval '1' day")
res.df = dbFetch(res, -1)  

我想在日期循环上运行它,以便填充 2018-07-01 和 2018-07-30 之间所有日期的数据

有人可以帮我写代码吗

【问题讨论】:

    标签: mysql sql r presto


    【解决方案1】:

    不需要循环来填充 2018 年 7 月 1 日到 2018 年 7 月 30 日之间所有日期的数据。

    您可以按日期过滤:

    res = dbSendQuery(con,
                      "select X, Y, z 
                      from table 
                      where date > '2018-06-31' 
                      and date < '2018-07-31'")
    res.df = dbFetch(res, -1)  
    

    【讨论】:

      【解决方案2】:

      如果你真的想要一个循环:

      date_seq <- as.character(seq(as.Date("2017-07-01"), 
                                   as.Date("2017-07-30"), by = "day"))
      
      for (i in 1:length(date_seq)) {
        string <- "select X, Y, z from table where date between date'REPLACEME' - interval '31' day and date'REPLACEME' - interval '1' day"
        string <- gsub("REPLACEME", date_seq[i], string)
        print(string) # replace this with the dbSendQuery
      }
      
      [1] "select X, Y, z from table where date between date'2017-07-01' - interval '31' day and date'2017-07-01' - interval '1' day"
      [1] "select X, Y, z from table where date between date'2017-07-02' - interval '31' day and date'2017-07-02' - interval '1' day"
      ...
      [1] "select X, Y, z from table where date between date'2017-07-30' - interval '31' day and date'2017-07-30' - interval '1' day"
      

      【讨论】:

      • 为什么不只是一个string &lt;- paste("select ... between ", date_seq, " and ", date_seq, " day") 而不是gsub 技巧?
      猜你喜欢
      • 2020-07-06
      • 2023-04-10
      • 2011-10-06
      • 2021-12-13
      • 2023-01-10
      • 2022-12-15
      • 2012-09-05
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多