小编典典

SQL查找缺少的日期范围

sql

我有一张可以容纳一年中所有天/月的表

例如

Day      Month
1         9
2         9
3         9
4         9
5         9
6         9
7         9
...       ...

我有一张表格,显示来自不同数据集的日期范围

例如

 DataSet    DateRange
webshop 2013-09-20
webshop 2013-09-21
webshop 2013-09-22
webshop 2013-09-23
webshop 2013-09-24
webshop 2013-09-25
webshop 2013-09-26
webshop 2013-09-27
webshop 2013-09-28
webshop 2013-09-29
webshop 2013-09-30

我如何比较这两个表以显示该特定月份的数据集中缺少哪些日期

对于上面示例中的数据集所在的示例,EGwebshop缺少日期范围01/09/2013-19/09/2013

谢谢你的帮助!


阅读 307

收藏
2021-03-23

共1个答案

小编典典

您可以使用CTE并通过以下方式编写查询:

declare @StartDate DATE, @EndDate DATE
set @StartDate = '2013-09-01';
set @EndDate = '2013-09-30';

  WITH DateRange(Date) AS
     (
         SELECT
             @StartDate Date
         UNION ALL
         SELECT
             DATEADD(day, 1, Date) Date
         FROM
             DateRange
         WHERE
             Date < @EndDate
     )

     SELECT 'webshop',Date 
     FROM DateRange
     EXCEPT 
     SELECT DataSet,DateRange
     FROM ImportedDateRange
     WHERE DataSet='webshop'
     --You could remove Maximum Recursion level constraint by specifying a MaxRecusion of zero
     OPTION (MaxRecursion 10000);
2021-03-23