Запрос RSQLite с указанной пользователем переменной в поле Thile [дубликат

StackOverflow https://stackoverflow.com/questions/3449666

  •  27-09-2019
  •  | 
  •  

Вопрос

Этот вопрос уже имеет ответ здесь:

Я использую RSQLite Библиотека в R In, чтобы управлять набором данных, который слишком велик для оперативной памяти. Для каждой регрессии я запрашиваю базу данных, чтобы получить финансовый год за раз. Теперь у меня есть фискальный год в жестком законе:

data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==2008")

Я хотел бы сделать финансовый год (2008 выше), чтобы внести изменения немного проще (и дурачиться). Есть ли способ, которым я могу пройти переменную в строку SQL Query? Я хотел бы использовать:

fiscal.year <- 2008
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year")
Это было полезно?

Решение

SQLite будет видеть только строку, переданную на запрос, так что вы делаете, это что-то вроде

  sqlcmd <- paste("SELECT * FROM annual WHERE fiscal=", fiscal.year, sep="")
  data.annual <- dbGetQuery(db, sqlcmd)

Приятно, что вы можете использовать это обычным способом распечатать петли. Забыть на секунду, что у вас есть ограничения RAM, концептуально вы можете сделать

  years <- seq(2000,2010)
  data <- lapply(years, function(y) {
     dbGetQuery(db, paste("SELECT * FROM annual WHERE fiscal=", y, sep="")
  }

И теперь данные - это список, содержащий все ваши ежегодные наборы данных. Или вы могли бы сохранить данные, запускать регрессию и хранить только сводный объект.

Другие советы

Ответ Дирка - это место. Одна маленькая вещь, которую я пытаюсь сделать, это изменить форматирование для удобного тестирования. Кажется, я должен вырезать и вставлять текст SQL в редактор SQL много раз. Так что я отформатирую так:

sqlcmd <- paste("
   SELECT * 
   FROM annual 
   WHERE fiscal=
 ", fiscal.year, sep="")
data.annual <- dbGetQuery(db, sqlcmd)

Это просто упрощает вырезать и вставлять биты SQL в / выделение для тестирования в вашей среде DB-запроса. Нет большого значения с коротким запросом, но может стать громоздким с более длинной строкой SQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top