Date Loop Query в R с использованием DBI

0

У меня есть запрос

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

Может кто-то, пожалуйста, помогите мне с кодом для этого

Теги:
prestodb

2 ответа

0

Цикл не нужен для заполнения данных для всех дат между 2018-07-01 и 2018-07-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)  
0

Если вы действительно хотите цикл:

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"
  • 1
    Почему бы не использовать единственную string <- paste("select ... between ", date_seq, " and ", date_seq, " day") вместо трюка с gsub ?
  • 0
    Ах, это круто!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню