我有一个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)上尝试优化用户体验和性能。
答案 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;