【问题标题】:SQL Server - identify date range gapsSQL Server - 识别日期范围差距
【发布时间】:2018-02-06 05:27:21
【问题描述】:

我希望能够识别我的网络数据中的日期间隔。例如:

  • 网络 1:1/1/12(开始)- 12/31/2014(结束)
  • 网络 2:1/1/17(开始)- 12/31/9999(结束)

在上面的示例中,网络 1 的结束日期和网络 2 的开始日期在 2015 年和 2016 年之间存在差距。

【问题讨论】:

  • 您的预期结果是什么?
  • 因为这是 SQL,所以您试图在其上形成查询的表架构是什么。为什么网络 2 的日期为 12/31/9999。你可以简单地让它未定义(即未定义的上限)
  • 这个 Stack Overflow 问题能解决您的问题吗? stackoverflow.com/questions/9604400/…
  • 9999 只是一个例子,它可以是 2018 年或任何其他未来年份。我的预期结果是与这些网络相关联的人。因此,A 人拥有“OPAR”网络,其序列 1 为 1/1/12(开始)- 12/31/2014(结束)和序列 2:1/1/17(开始)- 12/31/xxxx(结束)
  • 您应该在 OP 中提供更多数据以及预期输出示例。您当前的样本数据甚至没有提到“人 A”。到目前为止,大多数人能做的就是告诉你 LAG()LEAD()DATEDIFF 这样的函数可能会对你有所帮助。

标签: sql sql-server


【解决方案1】:

您需要有离散值才能比较日期并找出差距。由于 datetime 在天的意义上不是完全离散的(您有小时、分钟和秒),您可能会考虑创建一个日历表,例如:

|date      |
|----------|
|01-01-2000|
|01-02-2000|
|01-03-2000|
...
12-31-2050

我怀疑你是否需要填写到 9999 年。

日历表可以包含日期、月份或年份,具体取决于您的要求。

拥有这样的表格后,您可以将日历表格与您的数据表格连接起来,以根据您的标准找出差距。比如:

SELECT date, table.id 
FROM calendar
LEFT JOIN table on calendar.date  BETWEEN table.start_date AND table.end_date
WHERE table.id IS NULL

这是一个基本的假设示例,因为您尚未提供有关表和查询的完整信息,但您可以对其进行处理以获得所需的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2013-12-18
    相关资源
    最近更新 更多