我必须比较两个表之间的数据并检查是否有任何冲突。
下面是两个表的示例数据,Events & Bookings
我需要根据& 显示冲突的记录将bookings
表与表进行比较。Events
Date & Time
实际上,一旦日期更改,用户可以更改活动日期和时间,用户需要生成报告,如果他们已经对该特定日期和时间段进行了任何预订,则该报告将显示他们。
我正在使用以下查询来检查我们是否有任何更新活动的预订
询问
Declare @bTime varchar(10) = '10:30';
Declare @bDate date = '2012-08-15';
SELECT * FROM EventDatesReporting WHERE
((CONVERT(time(0), EventStartTime) <= CONVERT(time(0),@bTime )
AND CONVERT(time(0), EventEndTime) >= CONVERT(time(0),@bTime ))
OR
(CONVERT(time(0), EventStartTime) <= DATEADD(minute,59,CONVERT(time(0), @bTime))
AND CONVERT(time(0), EventEndTime) >= DATEADD(minute,59,CONVERT(time(0), @bTime))))
AND EventDates = @bDate
上面的查询工作正常,但我需要转换此查询,以便我可以将 Booking 表BookingDate & Time
与Events Table
我正在寻找基于性能的 ms sql-query 进行比较,因为这些表中的数据会随着时间增长。
活动
EventID EventStartDate EventEndDate EventDates DT EventStartTime EventEndTime
17 2012-07-25 2012-07-26 2012-07-25 2012-07-25 10:00:00 12:00:00
17 2012-07-25 2012-07-26 2012-07-26 2012-07-26 10:00:00 12:00:00
21 2012-05-28 2012-05-28 2012-05-28 2012-05-28 18:00:00 19:00:00
26 2012-01-01 2015-01-01 2012-07-01 2012-07-01 08:00:00 18:00:00
预订
BookingID TotalVisitors BookingDate Time BookingCancelled
1900221519 5 2012-07-10 10:30 0
5600515751 1 2012-07-20 10:30 0
8044913913 41 2012-07-05 10:30 0
1638934678 5 2012-07-20 10:30 1
5685687635 9 2012-07-25 10:30 0
在上述情况下,我们假设用户更改了 2012-07-25
与预订表冲突的第一个事件的日期,因为我们已经预订了该日期。我们需要找到这样的行,以便用户可以采取相应的行动,例如关于他们的预订取消等的亲密用户。
场景和细节
让我给你一张完整的照片,我们允许参观让我们说私人博物馆从周一到周五在两个不同的时间,一个在上午 10:30,第二个在下午 4:30,每次旅行我们最多可以接待 50 名游客(人)。假设一组 50 人想在 2012 年 8 月 15 日上午 10:30 参观博物馆,那么我们将在前端阻止这个日期。前端是一个简单的 Web 表单,具有常见字段,如姓名、地址、公司名称、访客人数、时间(这是一个下拉菜单,包含两个条目,上午 10:30,下午 4:30)和访问日期(这是一个日历控件这会阻止已达到完整预订的日期,并允许他们仅选择可用的日期。
另一方面,博物馆还组织特别活动,他们可以在预订表格上屏蔽这些日期。假设一个活动原定于 2012 年 8 月 10 日上午 9:00 至下午 1:00 举行,而该日期被管理员提前阻止。现在活动日期已更改为 2012-08-25。由于该日期之前没有安排任何活动,因此博物馆在该日期进行了一些预订。
由于博物馆不能为在 2012 年 8 月 25 日同一日期预订的人进行任何游览,因此需要通知。为此,我需要比较两个表事件表和预订表,如果我们在 2012 年 8 月 25 日 10:30 有任何预订,那么我们需要通过电子邮件通知游客取消他们的旅行。
在我的查询中,我还增加了 59 分钟的时间,因为我们需要在 EventStartTime 或 EventEndTime 之间至少休息 1 小时。
我希望这能让我了解我正在寻找什么样的数据报告。我提到的查询工作正常,但我需要将预订表中每一行的日期和时间值传递到事件表,并仅显示预订表中与 eventDate 和时间冲突的记录
所需输出 从示例数据中,我需要一个查询,该查询将仅向我显示以下记录,就好像它与更改事件日期后的预订冲突一样
EventID BookingID TotalVisitors BookingDate Time BookingCancelled
17 5685687635 9 2012-07-25 10:30 0