Voterei per l'utilizzo dei timestamp Unix (numero di secondi dall'"epoca"), dato che sono convenienti per il calcolo dell'intervallo e compresi dalle librerie di data-ora più robuste.
SQLite fornisce alcune funzioni di supporto per lavorare con i timestamp Unix. Il più utile qui sarà strftime
.
Puoi inserire il timestamp Unix corrente usando strftime('%s', 'now')
nel tuo INSERT.
Successivamente, se conosci un particolare intervallo di tempo che ti interessa, puoi calcolare i timestamp minimo e massimo per quell'intervallo e selezionare le righe tra di loro:
SELECT * FROM data
WHERE timestamp >= strftime('%s', '2012-12-25 00:00:00')
AND timestamp < strftime('%s', '2012-12-25 01:00:00');
Oppure, supponendo che tu voglia contare le richieste di un anno per mese:
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);
Attraverso un uso intelligente delle opzioni di formato strftime
fornisce, probabilmente puoi risolvere la maggior parte di queste query abbastanza rapidamente.