Поле даты постинкремента в запросе mySQL с использованием R - PullRequest
0 голосов
/ 09 октября 2018

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

1 Ответ

0 голосов
/ 15 октября 2018

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

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

...