У меня есть очень простая база данных SQLite с ежедневной ценовой историей со следующей схемой:
CREATE TABLE OHLCV_Components (symbol TEXT, tradeDate TEXT, openPrice REAL, highPrice REAL, lowPrice REAL, closePrice REAL, volume INTEGER)
Цены указаны в базе данных только для дат, в которые существуют данные для этой комбинации символ / дата.
Я строю запрос через Matlab, чтобы вернуть таблицу всех символов с ценовыми данными для данного диапазона дат:
SELECT symbol,
tradeDate,
closePrice
FROM OHLCV_Components
WHERE tradeDate BETWEEN DATE('2000-01-01') AND DATE('2000-01-05')
ORDER BY symbol ASC, tradeDate ASC
-------------------------------------
symbol tradeDate closePrice
-------------------------------------
A 2000-01-01 10.1
A 2000-01-02 10.3
A 2000-01-03 10.3
B 2000-01-01 5.1
B 2000-01-02 5.5
C 2000-01-01 20.9
C 2000-01-02 20.8
C 2000-01-05 20.7
D 2000-01-01 25.9
D 2000-01-02 25.8
D 2000-01-03 25.8
D 2000-01-05 25.7
Желательно, чтобы каждый символ в таблице имел длину, равную самой длинной непрерывной записи даты в запрошенном диапазоне дат (в данном случае символ D); то есть символам с отсутствующими ценовыми данными за данный день присваиваются значения NULL:
-------------------------------------
symbol tradeDate closePrice
-------------------------------------
A 2000-01-01 10.1
A 2000-01-02 10.3
A 2000-01-03 10.3
A 2000-01-05 NULL
B 2000-01-01 5.1
B 2000-01-02 5.5
B 2000-01-03 NULL
B 2000-01-05 NULL
C 2000-01-01 20.9
C 2000-01-02 20.8
C 2000-01-03 NULL
C 2000-01-05 20.7
D 2000-01-01 25.9
D 2000-01-02 25.8
D 2000-01-03 25.8
D 2000-01-05 25.7
Можно ли переложить эту задачу на эффективный запрос SQLite, вместо того, чтобы обращаться к нему программно, что может быть мучительно медленным для больших запросов?