ms-access - Access 2016 - 选择唯一的非重叠日期
问题描述
我需要查询许多具有开始和结束日期和时间字段的记录。如果有重叠的日期和时间,那么结果需要是最早的开始和最晚的结束。即 Main_ID timestart timeend 40952
02/10/2014 06:00:00 02/10/2014 17:00:00
40957 02/10/2014 10:00:00 02/10/2014 17:00:00
40956 02/10 /2014 15:00:00 02/10/2014 17:00:00
40965 02/10/2014 18:30:00 04/10/2014
40967 02/10/2014 20:00:00 02/10/2014 21 :30:00
40968 02/10/2014 21:30:00 04/10/2014
40972 03/10/2014 03/10/2014 06:00:00
40973 03/10/2014 03:00:00 03/10 /2014 06:00:00
40976 03/10/2014
04:00:00 03/10/2014 06:00:00 40978 03/10/2014 06:00:00 03/10/2014 12:00:00
40983 03/10/2014 13:00:00 03/10/2014 16:00:00
40986 03/10/2014 15:00:00 03/10/2014 18:00:00
40989 03/10/2014 18: 00:00 03/10/2014
22:00:00 40992 03/10/2014 22:00:00 05/10/2014
87140 10/06/2015 21:10:00 12/06/2015
87219 11/06/ 2015 年 11/06/2015 05:45:00
87218 11/06/2015 21:00:00 13/06/2015
结果应该是:
Main_ID timestart Main_ID timeend
40952 02/10/2014 06:00:00 40956 02/10/2014 17:00:00
40965 02/10/2014 18:30:00 40992 05/10/2014
87140 10/06/2015 21:10:00 87218 13/06/2015
解决方案
为了防止碰撞,这里的逻辑很简单:
在以下情况下发生冲突:RequestStartDate <= EndDate 和 RequestEndDate >= StartDate
因此,上面是一个相当简单的查询,但是如果发生任何冲突(包括任何重叠),上面将返回记录,并且您根本不允许预订。换句话说,由于我们绝不允许发生碰撞的预订,那么上述简单的陈述将适用于我们。
因此,要获得任何类型的重叠,代码将如下所示:
dim strWhere as string
dim dtRequeestStartDate as date
dim dtRequestEndDate as date
dtRequestStartDate = inputbox("Enter start Date")
dtRequestEndDate = inputbox("Enter end date")
strWhere="#" & format(dtRequestStartDate,"mm/dd/yyyy") & "# <= EndDate" & _
" and #" & format(dtRequestEndDate,"mm/dd/yyyy") & "# >= StartDate"
if dcount("*","tableBooking",strWhere) > 0 then
msgbox "sorry, you can’t book
...bla bla bla....
上面只是一个例子,我相信你会构建一个很好的表单来提示用户预订日期。然而,这里的好处是上面的简单条件确实会返回任何碰撞。
您还可以使用上面的“where”子句来表示启动报告,从而显示给定日期范围内的所有冲突。(只需在openform的“where”参数中传递“strWhere”,或打开报表。
请记住,日期部分可以包括“时间”部分,因此即使对于给定日期的预订或活动,上述查询也会返回任何重叠的日期/时间范围。
一旦你有了上述数据集(我假设你查询这个数据)。
此时,在结果数据集上,您可以简单地对 start 列执行 dmin(),或者按降序排序以首先显示最早的时间。
推荐阅读
- java - 即使绘制了新文本,也设置一次 Swing 应用程序的默认字体
- php - 在 required_once 文件中定义未扩展 php
- c - C : 我可以 Snprintf(buffer,buffersize,buffer,..) 吗?
- c# - BotBuilder C# 从 Scorable Dialogs 捕获“抱歉,我的机器人代码有问题”
- javascript - Angular - 从 Firestore 获取单个文档时遇到问题
- windows - 服务器上的远程 powershell 说参数的参数是空字符串
- dynamics-crm - 如何为 Dynamics 365 设置 Azure Web 服务
- random - Specman - 直接从测试初始化内部序列的参数值(从另一个序列执行)
- php - Laravel 5.6 $this->validate 与 Validator::make()
- dart - 具有水平和垂直中心对齐分隔线的 GridView