如何在给定日期范围内获得当天至少有一个活动的所有日期?

时间:2016-08-11 07:36:41

标签: sql sqlite

我有一个SQLite数据库,其中包含Events个表start and end dates。我希望得到一个Set(可能是一个没有重复的数组)的日期,他们至少在那天有一个事件让我们说从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.

NB:我期待一个可以解决此问题的答案仅使用SQL 而非组合一些编程代码。我需要在移动设备(iOS)上尝试优化用户体验和性能。

1 个答案:

答案 0 :(得分:1)

以下是使用递归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;

SQL fiddle demo