选择不在日期之间的行(保留)

Posted

技术标签:

【中文标题】选择不在日期之间的行(保留)【英文标题】:Select rows that are not between dates (reservation) 【发布时间】:2014-08-14 01:23:12 【问题描述】:

我有一个汽车租赁脚本。我有汽车在汽车表。我将所有预订信息保存在预订表中。预订表有 from 和 until 日期字段以及 car_id 字段。

例如:car_id: 14, from="2014-06-24", until="2014-07-24"。

我正在尝试编写一个查询来获取在给定日期之间保留的所有汽车。我已经尝试了一些技巧,比如内部连接和不存在等。

所以,假设我正在尝试获取日期“2014-06-24”和“2014-08-24”之间的可用汽车。

为了简化问题以明确我的问题:使用此查询选择预留汽车不起作用:

SELECT * FROM reservation WHERE from >= '2014-06-24' AND until <= '2014-08-24'

因为可能会在“2014 年 6 月 30 日”到“2014 年 9 月 15 日”期间预订汽车。由于查询中的截止日期不大于或等于截止日期,因此汽车不会显示为已预订。

希望你能明白我的意思。提前致谢。

感谢 Marc B 的回答,我找到了我正在寻找的查询:

SELECT * FROM cars WHERE NOT EXISTS (
SELECT * FROM reservation WHERE cars.id = reservation.car_id AND until >= '2014-06-24' AND from <= '2014-08-24')

【问题讨论】:

【参考方案1】:

考虑以下情况。您已获得已预订的日期 A 和 B,以及您尝试预订的两个日期 P 和 Q。这意味着以下条件可能为真:

A B P Q    date comes AFTER 'already booked'
A P B Q  * dates overlap
A P Q B  * dates are entirely overlapped
P A Q B  * dates overlap
P Q A B    date comes BEFORE 'already booked'

带有* 的条目是您感兴趣的条目,一旦您将所有的比较和逻辑分解,您最终会得到

P <= B && Q >= A

【讨论】:

以上是关于选择不在日期之间的行(保留)的主要内容,如果未能解决你的问题,请参考以下文章

删除重复行但保留最早的行(按日期标准) - SQL Server

使用 pandas 为每个日期时间值保留最新的行

T-SQL:删除所有重复的行但保留一个[重复]

获取报告后通过 jquery 日期选择器保留输入值

jQuery DatePicker:点击今天然后完成时,不保留今天的日期

在保留列的同时计算具有相同值的行