填补Mysql中数据范围之间的差距

时间:2013-03-26 08:27:30

标签: mysql sql

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

1 个答案:

答案 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