SQLite: Pobierz wszystkie daty między datami
Potrzebuję pomocy w związku z problemem SQL (w szczególności: SQLite). Mam stolik „wakacje”
CREATE TABLE vacation(
name TEXT,
to_date TEXT,
from_date TEXT
);
gdzie przechowuję datę (RRRR-MM-DD), gdy ktoś wyjeżdża na wakacje i wraca ponownie. Teraz chciałbym uzyskać charakterystyczną listę wszystkich dat, w których ktoś jest na wakacjach. Załóżmy, że mój stół wygląda tak:
+------------+-------------+------------+
| 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 |
+------------+-------------+------------+
Wynik zapytania powinien wyglądać następująco:
+------------------------------+
| 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 |
+------------------------------+
Myślałem o użyciu daty - tabeli „all_dates”
CREATE TABLES all_dates(
date_entry TEXT
);
który obejmuje 20-letni okres czasu (2010-01-01 do 2030-01-01) i następujące zapytanie:
SELECT date_entry FROM all_dates WHERE date_entry BETWEEN (SELECT from_date FROM vacation) AND (SELECT to_date FROM vacation);
Jeśli jednak zastosuję to zapytanie w powyższym zbiorze danych, otrzymam tylko ułamek pożądanego wyniku:
+------------------------------+
| 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 |
+------------------------------+
Czy można to zrobić za pomocą SQLite? Albo lepiej, jeśli po prostu zwrócę kolumnę „to_date” i „from_date” i wypełnię luki między tymi datami w mojej aplikacji Pythona?
Każda pomoc jest doceniana!