当前位置: 首页 > 面试题库 >

SQL查找缺少的日期范围

丁阳羽
2023-03-14
问题内容

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

例如

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

谢谢你的帮助!


问题答案:

您可以使用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);


 类似资料:
  • 问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算

  • 问题内容: 我在一个字段中有一个表格(其中包括日期)。 我需要获取所有列表的列表,这些列表比最早的日期更早,比最新的日期更早并且在表格中完全丢失。 因此,如果表包含: 我想要一个返回的查询: 问题答案: 这样的事情(假设您的表被命名,而date列被命名): 编辑: 该子句称为“公用表表达式”,等效于派生表(“内联视图”)。 类似于 第二个CTE使用Oracle实现中未记录的功能简单地“即时”创建日

  • 问题内容: 我有3个表要合并,每个表都有不同的关注列。我也有一个id变量,我想在id内进行单独的合并。我的想法是,我想按日期(在ID内)合并X,Y和Z,并且如果特定变量不存在该日期,则缺少值。 任何想法如何编写此SQL语句?我尝试弄乱“完全连接”和叉积的where语句,但是我一直在获取某些ID-日期组合(有时甚至没有ID)的重复值。 任何帮助,将不胜感激。 问题答案: 加入可能是棘手的事情。我通常

  • 问题内容: 我试图找到一种基于特定列(id)在数据框中查找重叠数据范围(每行提供的开始/结束日期)的更有效方法。 数据框在“来自”列上排序 我认为有一种方法可以像我一样避免“双重”应用功能… 我使用“应用”功能在所有组上循环,并且在每个组中,每行使用“应用”: 问题答案: 您可以移动列并直接减去日期时间。 分组时应用它可能看起来像 演示版

  • 问题内容: 我有一个表,其中每一行都有开始和结束日期时间。这些可以是短跨度或长跨度。 我想查询具有两个开始和停止日期时间的所有行的交集的总持续时间。 如何在MySQL中做到这一点? 还是必须选择与查询开始和结束时间相交的行,然后计算每行的实际重叠并将其累加到客户端? 举个例子,使用毫秒使它更清晰: 一些行: 我们想知道这些行在1030和1100之间的总时间。 让我们计算每行的重叠: 因此,本例中的

  • 问题内容: 我下面有一个SQL查询,它很好。 我正在修改此查询,以便它从闪亮的UI(daterange)输入日期。 我得到一个错误 不确定如何解决此查询,以便它需要从闪亮的UI中输入日期,需要帮助。 问题答案: 我通过简单地使用正则表达式来使用函数来做到这一点: