SQLite: obtenha todas as datas entre datas
Eu preciso de alguma ajuda com um problema relacionado SQL (em particular: SQLite). Eu tenho uma mesa 'férias'
CREATE TABLE vacation(
name TEXT,
to_date TEXT,
from_date TEXT
);
onde eu guardo a data (AAAA-MM-DD), quando alguém sai de férias e volta novamente. Agora, gostaria de obter uma lista distinta de todas as datas, em que alguém está de férias. Vamos supor que minha mesa se parece com:
+------------+-------------+------------+
| name | to_date | from_date |
+------------+-------------+------------+
| Peter | 2013-07-01 | 2013-07-10 |
| Paul | 2013-06-30 | 2013-07-05 |
| Simon | 2013-05-10 | 2013-05-15 |
+------------+-------------+------------+
O resultado da consulta deve se parecer com:
+------------------------------+
| dates_people_are_on_vacation |
+------------------------------+
| 2013-05-10 |
| 2013-05-11 |
| 2013-05-13 |
| 2013-05-14 |
| 2013-05-15 |
| 2013-06-30 |
| 2013-07-01 |
| 2013-07-02 |
| 2013-07-03 |
| 2013-07-04 |
| 2013-07-05 |
| 2013-07-06 |
| 2013-07-07 |
| 2013-07-08 |
| 2013-07-09 |
| 2013-07-10 |
+------------------------------+
Pensei em usar uma tabela de datas 'all_dates'
CREATE TABLES all_dates(
date_entry TEXT
);
que abrange um período de 20 anos (2010-01-01 a 2030-01-01) e a seguinte consulta:
SELECT date_entry FROM all_dates WHERE date_entry BETWEEN (SELECT from_date FROM vacation) AND (SELECT to_date FROM vacation);
No entanto, se eu aplicar essa consulta no conjunto de dados acima, só receberei uma fração do resultado desejado:
+------------------------------+
| dates_people_are_on_vacation |
+------------------------------+
| 2013-07-01 |
| 2013-07-02 |
| 2013-07-03 |
| 2013-07-04 |
| 2013-07-05 |
| 2013-07-06 |
| 2013-07-07 |
| 2013-07-08 |
| 2013-07-09 |
| 2013-07-10 |
+------------------------------+
Pode ser feito com o SQLite? Ou é melhor, se eu retornar as colunas 'to_date' e 'from_date' e preencher as lacunas entre essas datas em meu aplicativo Python?
Qualquer ajuda é apreciada!