1

我有一个发票表,我在其中存储给定数据范围的发票(即 2012 年 1 月 1 日至 2012 年 1 月 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 解决方案,或者实际获取发票然后计算我的应用程序中的差距会更好?

4

1 回答 1

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

在此处查看小提琴。

于 2013-03-26T08:49:04.030 回答