我需要查询许多具有开始日期和结束日期的记录。时间场。哪里有重叠日期&然后结果需要是最早的开始和最新结束。即
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
答案 0 :(得分:0)
为了防止碰撞,这里的逻辑非常简单:
发生碰撞时: 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”,或打开报告。
请注意,日期部分可以包含“时间”部分,因此即使对于某一天的预订或事件,上述查询也会返回重叠的任何日期/时间范围。
获得上述数据集后(我假设您查询此数据)。
此时,在结果数据集上,您可以简单地在开始列上执行dmin(),或者按降序排序以显示最早的时间。