所以我有两个表格 caring 和 client,就像这样
client {
id,
name
}
caring {
id,
startDate,
endDate,
clientId
}
我需要获取在提供的两个日期之间至少有一天可用的所有客户端,您可以参考我的截图。 在截图中,我有两个客户,需要将它们都返回。正如您所看到的,第一个客户在提供的期间(16.5.-29.5.)之间有三天空闲时间(21.5.-23.5.),而第二个客户没有任何关注期。
到目前为止,我尝试了类似这样的东西
SELECT * FROM client cl
WHERE cl.id NOT IN (SELECT clientId FROM caring
WHERE endDate >= CURDATE() AND endDate <= DATE_ADD(CURDATE(), INTERVAL 14 DAY))
这个查询仅返回没有任何护理的客户。这部分是我需要的,因为这个查询不包括我截图中的第一个客户。然后我尝试了下面的查询。
SELECT ca.startDate, ca.endDate, cl.firstName, cl.lastName
FROM caring ca
LEFT JOIN client cl on cl.id = ca.clientId
WHERE ca.startDate NOT IN (
SELECT endDate
FROM caring
) AND ca.startDate <= '2017-05-29' AND ca.endDate >= '2017-05-16'
但我没有得到期望的结果。
有什么想法可以实现这个目标吗?谢谢!