En la
primera entrada de esta serie vimos como crear una tabla
para almacenar los datos históricos del cambio euro-dólar. En esta
ocasión vamos a empezar a trabajar con estos datos.
Trabajar con los datos
Lo primero que vamos a
hacer es darle algo de formato a la salida que nos proporciona el
intérprete de sqlite para que sea algo más legible, para ello
escribimos:
.echo on
.mode column
.headers on
.nullvalue NULL
.mode column
.headers on
.nullvalue NULL
Básicamente, lo que le
hemos dicho a SQLite es que queremos ver los datos formateados por
columnas, y con una cabecera de tabla.
Para
mostrar todos los elementos contenidos en la base de datos (que
recomiendo no hacer porque llevaría un rato visualizarlos, ya que
son muchos) se haría:
SELECT
* FROM eurusd;
Para
contar el número de barras almacenadas en la base de datos
escribimos:
SELECT
count(*) FROM eurusd;
que
por cierto, debe coincidir con el número de líneas del fichero CSV
desde el que hemos importado los datos, y que se pueden contar con la
orden Unix:
wc -l
EURUSD.csv
Para
insertar una nueva barra se haría con:
INSERT
INTO eurusd (date, unix, open, high, low, close) VALUES (
'2011-11-01 00:01:00', 0, '1.1212', '1.2323', '1.3434', '1.4545'
);
'2011-11-01 00:01:00', 0, '1.1212', '1.2323', '1.3434', '1.4545'
);
Que a
su vez se puede borrar con:
DELETE
FROM eurusd WHERE date = '2011-11-01 00:01:00';
Finalmente,
podemos consultar cualquier barra con una orden como:
SELECT
* FROM eurusd WHERE date = "2001-01-05 02:26";
Consultas avanzadas
La
verdad es que las consultas que hemos hecho hasta ahora no son
especialmente útiles. Pero en esta sección vamos a empezar a ver la
potencia de almacenar los datos Forex en una base de datos
relacional.
Por
ejemplo si queremos ver el máximo y el mínimo alcanzado en cada mes
escribimos:
SELECT MAX(high) AS High, MIN(low) as Low,
STRFTIME("%Y-%m",
date) as Month
FROM eurusd
WHERE date > '2010-01-01' AND date < '2011-01-01'
GROUP BY STRFTIME("%Y-%m", date);
Si
queremos ver el máximo y mínimo alcanzado cada día:
SELECT
MAX(high) AS High, MIN(low) as Low,
STRFTIME("%Y-%m-%d", date) as Date
FROM eurusd
STRFTIME("%Y-%m-%d", date) as Date
FROM eurusd
WHERE date > '2010-01-01' AND date < '2011-01-01'
GROUP BY STRFTIME("%Y-%m-%d", date);
Si
queremos ver el máximo y mínimo alcanzado durante un periodo
cualquiera de tiempo, por ejemplo 40 minutos, hacemos:
SELECT
high, low FROM eurusd WHERE date >= "2001-01-05 02:00"
AND date <= "2001-01-05 02:40";
Y
finalmente, si queremos ver el precio de apertura en barras diarias,
haríamos:
SELECT
open, date FROM eurusd WHERE date IN
(SELECT MIN(date)
(SELECT MIN(date)
FROM eurusd
WHERE date > '2010-01-01' AND date < '2011-01-01'
GROUP BY STRFTIME("%Y-%m-%d", date));
Y
esto es todo para esta entrega. En la siguiente entrada de este blog veremos cómo realizar algunas consultas más avanzadas.