После бесконечных попыток обработки больших (3-35 ГБ) файлов csv в R я перешел на SQL для обработки этих наборов данных. Итак, я использую этот код в среде R (используя пакет RSQLite на основе SQlite), но он не должен отвлекать от моего вопроса SQL!
Мой вопрос: как мне выбрать одну таблицу на основе совпадающих значений, приведенных в другой таблице?
Хочу пояснить на примере. У меня такой формат таблицы:
Таблица данных
Symbol| Value| EX
A | 1 | N
A | 1 | N
A | 2 | T
A | 3 | N
A | 4 | N
A | 5 | N
B | 1 | P
B | 2 | P
B | 2 | N
B | 2 | N
B | 3 | P
B | 5 | P
B | 6 | T
...
Я хочу выбрать все записи, для которых значение symbol и exchange соответствует определенному условию, приведенному в приведенной ниже таблице.
Таблица Symbolexchange:
Ticker| Exchange
A | N
B | P
...
(Обратите внимание, что символ и тикер относятся к одному и тому же атрибуту, также EX и Exchange относятся к одному и тому же атрибуту)
Таким образом, результат, к которому я стремлюсь, таков, чтобы он сохранял только записи A, если обмен равен N и т. Д.:
Symbol| Value| EX
A | 1 | N
A | 1 | N
A | 3 | N
A | 4 | N
A | 5 | N
B | 1 | P
B | 2 | P
B | 3 | P
B | 5 | P
...
Мне удалось сделать это двумя способами, хотя они меня не совсем устраивают.
Этот метод добавляет справочную таблицу в столбцы рядом с исходной таблицей, которая является избыточной.
SELECT *
FROM Data
INNER JOIN Symbolexchange
ON Data.EX=Symbolexchange.EXCHANGE
AND Data.SYMBOL=Symbolexchange.TICKER
Этот метод также выполняет работу напрямую, но работает медленнее, чем описанный выше.
SELECT *
FROM Data
WHERE EX=(SELECT exchange FROM Symbolexchange WHERE ticker = SYMBOL)
Есть ли способ лучше и быстрее запрограммировать это? Скорость очень важна из-за размера моих наборов данных. Любые другие комментарии к моему коду приветствуются!
Спасибо
EX
. Вы этого хотите? Вам не нужно совпадатьSymbol
иTicker
? - person unlimit   schedule 30.10.2013EX
на основе таблицы Symbolexchange. Итак, для тикера A я хочу выбрать только строки, для которых Exchange равен N. Для тикера B я хочу выбрать только строки, для которых Exchange равен P. и т. Д. - person Hugstime   schedule 30.10.2013Select *
, а выполняяSelect data.symbol, data.value, data.ex
. - person unlimit   schedule 30.10.2013