Поле даты постинкремента в запросе mySQL с использованием R

0

Я пытаюсь запросить таблицу в нашей базе данных mySQL с помощью пакета DBI R. Однако мне нужно вытащить поля из таблицы, ежемесячно меняя поле даты и ограничивая его 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 их, но я бы предпочел сделать один эффективный запрос. У кого-нибудь есть какие-либо идеи?

Теги:
dbi
r-package
rmysql

1 ответ

0

Это ниже решение может дать вам представление о том, как приступить к вашей проблеме.

> dummyTable
   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. Затем нам нужно получить доступ к данным за 1-й день каждого месяца и хранить целые записи в качестве фрейма данных.

### 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(preffered 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.

Ещё вопросы

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