Есть несколько способов сделать это, но так как вы сказали, что вы новичок в R
, это может быть естественным подходом.Во-первых, создайте функцию, которая позволяет вам изменять select_cols
, tbl
и date
и возвращает строку:
make_query <- function(select_cols, tbl, date) {
paste0("SELECT ", select_cols, " FROM ", tbl, " WHERE date = '", date, "';")
}
make_query("*", "my_table", "28Feb2018")
[1] "SELECT * FROM my_table WHERE date = '28Feb2018';"
make_query("*", "different_table", "28Feb2018")
[1] "SELECT * FROM different_table WHERE date = '28Feb2018';"
Затем вы можете создать вектор дат для циклического прохождения:
various_dates <- c("28Feb2018", "01Mar2018", "02Mar2018")
for (date in seq_along(various_dates)) {
make_query("*", "my_table", various_dates[date])
}
Конечно, вы можете изменить тело цикла, чтобы использовать вашу sqlQuery
функцию:
for (date in seq_along(various_dates)) {
sqlQuery(datamart, make_query("*", "my_table", various_dates[date]),
as.is = TRUE, stringsAsFactors = FALSE)
}
И так как вы хотите сохранить результаты, вы можете предварительно-выделите пустой список такой же длины, как число дат, и сохраните результаты:
df <- vector("list", length(various_dates))
for (date in seq_along(various_dates)) {
df[[date]] <- sqlQuery(datamart, make_query("*", "my_table", various_dates[date]),
as.is = TRUE, stringsAsFactors = FALSE)
}