gpt4 book ai didi

mysql - 查找可用日期

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:58 25 4
gpt4 key购买 nike

我有两个表(1. 订单和 2. 汽车):

汽车

Cars

订单

Orders

我正在尝试查找在给定日期可用的所有汽车。在这种情况下,我想找到 2016-05-03 和 2016-05-05 之间所有可用的汽车。我检查NOT BETWEEN 所述日期的汽车或尚未在订单中注册的汽车 (orders.car_id IS NULL)。这是查询:

SELECT destination, COUNT(destination) AS 'available cars' 
FROM cars
LEFT JOIN orders ON cars.id = orders.car_id

WHERE (orders.car_id IS NULL

OR (

date_to NOT BETWEEN '2016-05-03' AND '2016-05-05'
AND date_from NOT BETWEEN '2016-05-03' AND '2016-05-05'

)

)

AND destination = 'Kristiansand' GROUP BY destination

问题出在 id = 8 的 Audi A1 上。如您所见,它在两个约会上注册,一个从 2016-05-032016-05-05,一个从 2016-04-29 2016-04-30

由于 4 月底的第二对日期 NOT BETWEEN 查询中的给定日期,因此 A1 是可用的汽车,这远非真实。

I'm trying to fetch all cars available for rental outside of the given dates in Kristiansand.

最佳答案

假设您有 2 个时间段 T1 和 T2 来检查它们是否重叠你做这个检查(T1.start <= T2.end)和(T1.end >= T2.start)。

所以试试下面的查询,(它会检查并确保不存在与指定时间段重叠的同一辆车的订单

SET @startdate = '2016-05-03',@enddate = '2016-05-05';

SELECT c.destination,COUNT(c.destination) as available_cars
FROM cars c
WHERE NOT EXISTS (SELECT 1
FROM orders o
WHERE o.car_id = c.id
AND o.date_from <= @enddate
AND o.date_to >= @startdate)
AND c.destination = 'Kristiansand'
GROUP BY c.destination

http://sqlfiddle.com/#!9/9340e3/4

您可以删除 @enddate 和 @startdate 中的 SET 语句和硬编码

关于mysql - 查找可用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944196/

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