Sql 如何从给定的日期范围中获取当天至少有一个事件的所有日期?

Sql 如何从给定的日期范围中获取当天至少有一个事件的所有日期?,sql,sqlite,Sql,Sqlite,我有一个SQLite数据库,其中包含一个带有开始日期和结束日期的事件表。我想得到一个集合,可以是一个没有重复日期的数组,它们至少在那天有一个事件,比如说从8月1日到8月20日 让我们以一些事件为例: Event 1 from 02.08.2016 to 07.08.2016 Event 2 from 10.08.2016 to 12.08.2016 Event 3 from 11.08.2016 to 15.08.2016 Then the outcome should be: [02.08

我有一个SQLite数据库,其中包含一个带有开始日期和结束日期的事件表。我想得到一个集合,可以是一个没有重复日期的数组,它们至少在那天有一个事件,比如说从8月1日到8月20日

让我们以一些事件为例:

Event 1 from 02.08.2016 to 07.08.2016
Event 2 from 10.08.2016 to 12.08.2016
Event 3 from 11.08.2016 to 15.08.2016

Then the outcome should be: 
[02.08.2016, 03.08.2016, 04.08.2016, 05.08.2016, 06.08.2016, 07.08.2016, 10.08.2016, 11.08.2016, 12.08.2016, 13.08.2016, 14.08.2016, 15.08.2016]

where 11.08.2016 and 12.08.2016 are not repeating.

注:我期待一个答案,可以解决这个问题,只使用SQL,而不是结合一些编程代码。我需要在移动设备iOS上使用它,我正在尝试优化用户体验和性能。

以下是使用递归CTE创建日期表并使用它选择所需日期的示例:

WITH RECURSIVE
  cnt(dt) AS 
  (
     SELECT MIN(startDate) FROM Events
     UNION ALL
     SELECT date(dt,'+1 day') FROM cnt 
           WHERE dt < (SELECT MAX(endDate) FROM Events)
           LIMIT 10000
  )
SELECT DISTINCT dt 
FROM cnt
JOIN Events ON dt BETWEEN startDate AND endDate
ORDER BY dt;

创建一个日历表,包含您可能需要的所有日期,然后根据它加入并选择不同的日期。您可用的SQLite最低版本是什么?@CL.SQLite 3.7.13在iOS 7下。然后您不能使用CTEs。在代码中生成日期列表可能更容易。使用CTE生成连续日期通常不是一种有效的资源使用方式。日历表或数字表只占用数年时间的几kB,使查询更简单、更精简。如果必须使用SQL,我强烈建议使用SQL。如果几kB的内存开销太大,请在应用程序中循环使用它并在那里生成日期。