3

我需要一些有关 SQL(特别是:SQLite)相关问题的帮助。我有一张桌子'假期'

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
);

它涵盖了 20 年的时间跨度(2010-01-01 到 2030-01-01)和以下查询:

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 应用程序中填补这些日期之间的空白?

任何帮助表示赞赏!

4

1 回答 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
于 2013-07-09T13:25:58.190 回答