【问题标题】:SQL - Date range falls between given date rangSQL - 日期范围介于给定日期范围之间
【发布时间】:2017-12-20 20:34:36
【问题描述】:

我试图找出所有不属于租期的租约。 我的表结构如下:

单位可用性表:

单位密钥开始日期结束日期可用性 1 2015 年 1 月 1 日 2015 年 6 月 1 日 1 1 2015 年 6 月 2 日 2015 年 12 月 31 日 0 1 2016 年 1 月 1 日 2016 年 12 月 31 日 1 2 2015 年 1 月 1 日 2015 年 6 月 1 日 1 2 2015 年 6 月 2 日 2015 年 12 月 31 日 0

租赁表:

单位密钥租赁开始租赁结束 1 2015 年 1 月 1 日 2015 年 6 月 1 日 1 2015 年 7 月 2 日 2015 年 8 月 2 日

我希望编写一个逻辑来确定所有不属于可用期限的租约。在这种情况下,lease 表中的第 2 行应该是输出。

我们将不胜感激任何形式的帮助或领导。

【问题讨论】:

  • 在这里发布图像而不是示例数据而不是数据的文本被认为是非常粗鲁的。你是新人,所以你通过了,但是文字让我们更容易设置一个示例表,以确保我们的答案是好的。
  • 谢谢你,乔尔,我不知道该怎么做。但感谢您的编辑。非常感谢您的帮助。

标签: sql date date-range


【解决方案1】:

我猜Availability = 0 表示它不可用。

select distinct
  Lease.*
from
  Lease
  join UnitAvailability on
    Lease.UnitKey = UnitAvailability.UnitKey
    and Lease.LeaseStart <= UnitAvailability.EndDate
    and Lease.LeaseEnd >= UnitAvailability.StartDate
where
  Availability = 0

【讨论】:

    【解决方案2】:

    你应该使用 NOT EXISTS 语句:

    SELECT * FROM LEASE L
    WHERE NOT EXISTS (SELECT * FROM AVAILABILITY A
      WHERE A.UNIT_KEY = L.UNIT_KEY
      AND A.AVAILABILITY = 1
      AND A.START_DATE <= L.LEASE_START
      AND A.END_DATE >= L.LEASE_END);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多