Votaría por usar marcas de tiempo de Unix (número de segundos desde la "época"), dado que son convenientes para el cálculo de rangos y las bibliotecas de fecha y hora más sólidas las entienden.
SQLite proporciona algunas funciones auxiliares para trabajar con marcas de tiempo de Unix. El más útil aquí será strftime
.
Puede insertar la marca de tiempo actual de Unix usando strftime('%s', 'now')
en tu INSERCIÓN.
Más tarde, si conoce un rango de tiempo en particular que le interese, puede calcular las marcas de tiempo mínimas y máximas para ese rango y seleccionar filas entre ellas:
SELECT * FROM data
WHERE timestamp >= strftime('%s', '2012-12-25 00:00:00')
AND timestamp < strftime('%s', '2012-12-25 01:00:00');
O, suponiendo que desea contar las solicitudes de un año por mes:
SELECT strftime('%m', timestamp), count(*) FROM Data
WHERE timestamp >= strftime('%s', '2012-01-01 00:00:00')
AND timestamp < strftime('%s', '2013-01-01 00:00:00')
GROUP BY strftime('%m', timestamp);
Mediante el uso inteligente de las opciones de formato strftime
proporciona, probablemente pueda resolver la mayoría de esas consultas con bastante rapidez.