我有一张发票表,用于存储给定数据范围的发票(即2012-01-01至2012-01-31之间的发票1)。现在,有些日子可能没有相关的发票,所以你会有
> ID | START_DATE | END_DATE
> ----------------------------
> 1 | 2012-01-01 | 2012-01-31
> 2 | 2012-02-05 | 2012-02-28
因此,在这种情况下,从2月起的5天内将没有与之关联的发票。这些天我想估算成本,所以我需要以某种方式“获取”这些缺失的数据范围。
我在SO上看到了一些类似问题的答案,但大多数都依赖于我无法创建的附加日历表。
是否有其他SQL解决方案,或者实际获取发票然后计算应用程序中的差距会更好吗?
答案 0 :(得分:0)
如果数据集没有重叠日期,一个解决方案是使用这样的查询,它会提取所有缺失的范围:
select
r1.END_DATE + INTERVAL 1 DAY d1, MIN(r2.START_DATE) - INTERVAL 1 DAY d2
from
ranges r1 INNER JOIN ranges r2
ON r1.END_DATE <= r2.START_DATE
group by
r1.END_DATE
having
DATEDIFF(MIN(r2.START_DATE), r1.END_DATE) > 1
请参阅小提琴here。