首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL :如何根据开始日期和结束日期获取可用的电话号码?

SQL :如何根据开始日期和结束日期获取可用的电话号码?
EN

Stack Overflow用户
提问于 2019-12-04 08:05:57
回答 2查看 70关注 0票数 0

我有一项业务是在旅行时出租国际电话号码给客户。当客户下订单时,我希望根据客户的start_dateend_date向客户显示预订日期的可用电话号码。

因为这些电话号码是租出去的,所以我只需要从表中选择那些还没有租出去的号码,因为它们的日期会影响当前客户的日期。

我也不想在结束日期后7天内出租任何电话号码。也就是说,如果一个客户预订了2020年1月1日到2020年1日之间的电话号码,我不希望这个电话号码在2020年1月27日之前被另一个客户预订。我希望电话号码有一个7天的窗口是明确的。

我有一个包含电话号码的表和一个包含通过phone_number_id与电话号码表相关的订单的表。orders表中有用于旅行的当前客户start_dateend_date,但还没有保存电话号码id。orders表还包含所有其他客户的旅行日期的start_dateend_date,以及为他们的旅行日期分配/预订了哪些phone_number_id

当尝试选择可用于当前客户日期的电话号码时,SQL查询会是什么样子?

EN

回答 2

Stack Overflow用户

发布于 2019-12-04 08:12:42

您正在寻找没有订单与目标租期重叠的电话号码。假设目标租期由参数:start_date:end_date定义,您可以这样做:

代码语言:javascript
复制
select p.*
from phone_numbers p
left join orders o
    on  o.phone_number_id = p.phone_number_id
    and :start_date + interval 7 day <= o.end_date
    and :end_date >= o.start_date + interval 7 day
where o.phone_number_id is null

即:对于每个电话号码,尝试查找周期与目标租赁周期重叠的订单(额外清空7天),并过滤不存在重叠订单的订单。

注意:将日期添加到日期的实际语法可能因您的RDBMS而异。

票数 0
EN

Stack Overflow用户

发布于 2019-12-04 08:16:16

我不确定您使用的是什么数据库,但这里有一个基于Oracle语法的示例。他们的关键是将七天加到结束日期上,以获得七天保证金。

代码语言:javascript
复制
SELECT *
FROM  my_table
WHERE TO_DATE('01/01/2020','MM/DD/YYYY') NOT BETWEEN start_date
                                                 AND end_date + 7
AND   TO_DATE('01/20/2020','MM/DD/YYYY') NOT BETWEEN start_date
                                                 AND end_date + 7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59167176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档