查询以找出日期不重叠的条目
Query to find out entries where dates don't overlap
任何人都可以帮我创建一个查询来填充尚未预订的 DJ 列表。
我的用户将 select 开始日期(和时间)和结束日期(和时间)- 然后单击一个按钮 select 一个 DJ。
我只希望那些在这些时间段之间可用的 DJ 出现在列表中。
这里是涉及到的两个表
列表框中我只需要 DJ 编号和 DJ 名称
到目前为止我有这个...但它不起作用:
SELECT tblDJ.DJ_No AS [DJ ID], tblDJ.DJ_Name AS Name FROM tblDJ
WHERE (((tblDJ.[DJ_No]) Not In
(SELECT tblBooking.[FK_DJ_No]
FROM tblBooking
WHERE ( (tblBooking.End_Date) >= 01-04-2020 19:30:00 )))) ....etc....
我现在只是在这里输入一个日期,但显然一旦实现它就会存储在一个变量中。
谢谢
SQL 中的日期需要包含在两个 #
之间,以便 MS-Access 将其识别为日期:
select *
from tblDJ
where DJ_No not in
(
select FK_DJ_No
from tblBooking
where End_Date >= #2020-04-01 19:30:00#
)
除此之外您的查询将有效。
实现两个间隔的 OVERLAPS
看起来像:
1st_start_date <= 2nd_end_date and 1st_end_date >= 2nd_start_date
其中 1st
和 2nd
值是不同事件的标记。
您可以将该逻辑与 NOT EXISTS
结合使用,以丢弃在给定时间不可用的那些 dj:
select dj_no, dj_name
from tbldj d
where not exists (
select 1
from tblbooking b
where b.fk_dj_no = d.dj_no
and b.start_date <= #END DATE#
and b.end_date >= #START DATE#
)
您只需将 #START DATE#
和 #END DATE#
替换为您的值即可。
这确实有效,因为有以下假设:
- 第一个活动的开始日期早于该活动的结束日期
- 第二个活动的开始日期早于该活动的结束日期
这似乎合乎逻辑,对吧?
任何人都可以帮我创建一个查询来填充尚未预订的 DJ 列表。
我的用户将 select 开始日期(和时间)和结束日期(和时间)- 然后单击一个按钮 select 一个 DJ。
我只希望那些在这些时间段之间可用的 DJ 出现在列表中。
这里是涉及到的两个表
列表框中我只需要 DJ 编号和 DJ 名称
到目前为止我有这个...但它不起作用:
SELECT tblDJ.DJ_No AS [DJ ID], tblDJ.DJ_Name AS Name FROM tblDJ
WHERE (((tblDJ.[DJ_No]) Not In
(SELECT tblBooking.[FK_DJ_No]
FROM tblBooking
WHERE ( (tblBooking.End_Date) >= 01-04-2020 19:30:00 )))) ....etc....
我现在只是在这里输入一个日期,但显然一旦实现它就会存储在一个变量中。
谢谢
SQL 中的日期需要包含在两个 #
之间,以便 MS-Access 将其识别为日期:
select *
from tblDJ
where DJ_No not in
(
select FK_DJ_No
from tblBooking
where End_Date >= #2020-04-01 19:30:00#
)
除此之外您的查询将有效。
实现两个间隔的 OVERLAPS
看起来像:
1st_start_date <= 2nd_end_date and 1st_end_date >= 2nd_start_date
其中 1st
和 2nd
值是不同事件的标记。
您可以将该逻辑与 NOT EXISTS
结合使用,以丢弃在给定时间不可用的那些 dj:
select dj_no, dj_name
from tbldj d
where not exists (
select 1
from tblbooking b
where b.fk_dj_no = d.dj_no
and b.start_date <= #END DATE#
and b.end_date >= #START DATE#
)
您只需将 #START DATE#
和 #END DATE#
替换为您的值即可。
这确实有效,因为有以下假设:
- 第一个活动的开始日期早于该活动的结束日期
- 第二个活动的开始日期早于该活动的结束日期
这似乎合乎逻辑,对吧?