gpt4 book ai didi

mysql - 如何在MySQL中获取某个日期的 'available' express 员?

转载 作者:可可西里 更新时间:2023-11-01 08:29:31 24 4
gpt4 key购买 nike

背景

我有一张表Deliveries:

+---------+-------------+---------------+
| courier | pickup_date | delivery_date |
+---------+-------------+---------------+
| Sebby | 2015-05-02 | 2015-05-04 |
| Ian | 2015-05-07 | 2015-05-08 |
| Sebby | 2015-05-12 | 2015-05-16 |
| Bart | 2015-05-18 | 2015-05-21 |
| Ian | 2015-05-27 | 2015-05-29 |
+---------+-------------+---------------+

从视觉上看, express 员的行程是这样的:

enter image description here

问题

搜索条件是一个日期范围,我必须返回在该日期范围内“可用”的 express 公司。例如,搜索条件来自 2015-05-16 - 2015-05-17。查看表格或日历,很容易知道在这些日期只有 Ian 和 Bart 有空。 如何在 MySQL 中执行此操作?

我尝试过的

我看到了这个answer所以我试了一下:

SELECT courier FROM Deliveries
WHERE pickup_date > '2015-05-17'
OR delivery_date < '2015-05-16'

这给了我 Ian 和 Bart。但它也包括塞比。这是因为虽然 Sebby 的 2015-05-12 - 2015-05-16 与搜索条件重叠,但 2015-05-02 - 2015-05-04 不所以它在查询中返回。我需要做一些类似限制查询的事情。如果 express 员的行程重叠一次,则不要在查询中返回。我可以在源代码中执行此操作,但我更喜欢在 MySQL 中执行所有过滤。源代码将是最后的手段。

This在可能已经有了我的答案的问题上突然出现,这似乎与我之前的尝试相似。

This question (和答案)也谈到了我之前的尝试。我看到的其他一切似乎都以某种方式相关,但没有回答我的问题。

我走在正确的轨道上吗?还是我处理问题的方法不对?

架构

我将提供创建表的脚本以节省您的时间:)

CREATE TABLE Deliveries (
courier varchar(15),
pickup_date date,
delivery_date date
);

INSERT INTO Deliveries (courier, pickup_date, delivery_date) VALUES
('Sebby', '2015-05-02', '2015-05-04'),
('Ian', '2015-05-07', '2015-05-08'),
('Sebby', '2015-05-12', '2015-05-16'),
('Bart', '2015-05-18', '2015-05-21'),
('Ian', '2015-05-27', '2015-05-29');

最佳答案

这样的东西可能对你有用。我还建议您为您的 express 公司名称准备另一个表格,以使事情变得更加优化。

select distinct courier
from deliveries d
where not exists (
select 1 from deliveries d2
where d.courier = d2.courier
and (('2015-05-16' between pickup_date and delivery_date)
or ('2015-05-17' between pickup_date and delivery_date)
or (pickup_date between '2015-05-16' and '2015-05-17')
or (delivery_date between '2015-05-16' and '2015-05-17'))
)

demo here

通过使用 where not exists,这应该排除任何 express 员:

  1. 有一个跨越搜索期开始的交付
  2. 有一个跨越搜索期结束的交付
  3. 在您的搜索期限内有取件日期的送货
  4. 有交货日期在您的搜索期限内

我认为这涵盖了所有基础——只有最后两个中的一个是绝对必要的,它涵盖了现有交付完全在搜索期内的情况

关于mysql - 如何在MySQL中获取某个日期的 'available' express 员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30658060/

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