SQLite:获取两个日期之间的所有日期

3
我需要帮助解决一个与 SQL(特别是:SQLite)相关的问题。我有一个名为“vacation”的表格。
CREATE TABLE vacation(
    name TEXT,
    to_date TEXT, 
    from_date TEXT
);

我存储离开和回来的日期(YYYY-MM-DD),当有人去度假时。现在,我想获得所有度假期间某人在场的日期的独特列表。假设我的表如下:
+------------+-------------+------------+
|    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 |
+------------+-------------+------------+

查询结果应该是这样的:
+------------------------------+
| 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          |
+------------------------------+

我考虑使用一个日期表 - 'all_dates'。
CREATE TABLES all_dates(
    date_entry TEXT
);

它涵盖了2010年1月1日至2030年1月1日的20年时间跨度和以下查询:
SELECT date_entry FROM all_dates WHERE date_entry BETWEEN (SELECT from_date FROM vacation) AND (SELECT to_date FROM vacation); 

然而,如果我在上述数据集上应用此查询,我只能得到我所需结果的一小部分:
+------------------------------+
| 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          |
+------------------------------+

它可以用SQLite完成吗?还是最好只返回“to_date”和“from_date”列,并在我的Python应用程序中填充这些日期之间的空白?任何帮助都将不胜感激!
1个回答

4
你可以尝试这样做:
SELECT date_entry 
FROM vacation 
JOIN all_dates ON date_entry BETWEEN from_date AND to_date
GROUP BY date_entry
ORDER BY date_entry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接