gpt4 book ai didi

mysql - 获取两个日期之间的所有可用项目

转载 作者:行者123 更新时间:2023-11-28 23:16:04 24 4
gpt4 key购买 nike

我在执行一个查询时遇到困难,所以我需要选择两个日期之间所有可用的服务员,并且我有这样的表

attendant { 
id,
name
}

job {
id,
attendantId,
name,
startDate,
endDate
}

我需要做的是让所有在 2 个日期之间没有工作的可用服务员。

我正在尝试通过此查询来完成此操作,但出于某种原因,我没有得到在提供的日期之间不忙的服务员

SELECT a.id, a.firstName, a.lastName, a.phoneNumber, a.address, a.attendantType
FROM attendant a
WHERE a.id NOT IN (
SELECT attendantId FROM job
WHERE startDate <= PROVIDED_END_DATE AND endDate >= PROVIDED_START_DATE
)

例如,如果我有服务员 John Doe 的工作,从 1.1.2017 到 1.10.2017 并且如果我选择从 1.11.2017 到 1.15.2017 获取所有可用服务员,我需要重新运行 John Doe 作为可用服务员,例如,如果我选择我需要从 2017 年 9 月 1 日到 2017 年 15 月 1 日可用的服务员,我不应该让 John Doe 因为显然他在那段时间很忙(在 1.09. 和 1.10)。长话短说,我需要返回在选定时间段内不在工作表中的服务员。

对于我当前的查询,我遇到了问题,因为当 NOT IN 子句返回 0 行时,我没有得到其他服务员。

这是我数据库中的示例,我有一份工作如下所示:

Job {
attendantId: 1,
startDate: 2017-05-01,
endDate: 2017-05-06
}

我的查询是这样的:

SELECT a.id, a.firstName, a.lastName, a.phoneNumber, a.address, a.attendantType
FROM attendant a

WHERE a.id NOT IN (

SELECT c.attendantId FROM job j

WHERE j.startDate <= "2017-05-24" AND j.endDate >= "2017-05-20"

)

我期待返回 ID 为 1 的服务员。

最佳答案

我认为您的代码很接近。希望以下内容对您有用:

SELECT
a.id,
a.firstName,
a.lastName,
a.phoneNumber,
a.address,
a.attendantType
FROM attendant a
WHERE
NOT EXISTS (SELECT c.attendantId
FROM job j
WHERE j.startDate <= "2017-05-24"
AND j.endDate >= "2017-05-20"
AND a.id = c.attendantId
)

关于mysql - 获取两个日期之间的所有可用项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com