mysql 日期比较不起作用

标签 mysql

我已经阅读了主题并搜索了其他论坛,但没有运气。

我有两个表,AYEAR 和 SCHEDULE,如下所示

一年

ay    Block Block_start_date    Block_end_date  
1213    4    2012-07-09         2013-05-13
1314    4    2013-07-01         2014-05-09
1415    4   2014-06-23          2015-05-08
1516    4   2015-07-06          2016-05-09
1617    4   2016-04-11          2017-05-01

时间表

scheduleid    sched_start_date   sched_end_date

59576370      2016-04-11        2016-05-06
...
...
...

我的预定事件时间为 2016 年 4 月 11 日至 2016 年 5 月 6 日。我想知道这个时间范围属于哪一年。

我正在运行以下查询

Select ay, scheduleid, sched_start_date, sched_end_date

from schedule, ayear  o

where scheduleid = 59576370

and block = 4

and sched_start_date >= (select max(block_start_date)
                                   from ayear i
                                   where i.block=  o.block
                                   and sched_start_date >= i.block_start_date 
                                   and sched_end_date <= i.block_end_date 
                                   )

and sched_end_date <=  (select max(block_end_date)
                                   from ayear i
                                   where i.block=  o.block
                                   and sched_start_date >= i.block_start_date 
                                   and sched_end_date <= i.block_end_date 
                                   )

它给了我这个:

ay    sched     sched_start_date sched_end_date block_start_date  block_end_dt

1213  59576370  2016-04-11       2016-05-06     2012-07-09        2013-05-13      
1314  59576370  2016-04-11       2016-05-06     2013-07-01        2014-05-09      
1415  59576370  2016-04-11       2016-05-06     2014-06-23        2015-05-08      
1516  59576370  2016-04-11       2016-05-06     2015-07-06        2016-05-09      
1617  59576370  2016-04-11       2016-05-06     2016-04-11        2017-05-01      

当我期望只得到最后一行时。

两个表中的所有日期字段都定义为日期。

我想我的问题是,如何识别重叠的时间范围?

最佳答案

考虑以下因素:

CREATE TABLE ayear
(ay    INT NOT NULL PRIMARY KEY
,Block INT NOT NULL
,Block_start_date    DATE NOT NULL
,Block_end_date   DATE NOT NULL
);

INSERT INTO ayear VALUES
(1213    ,4    ,'2012-07-09','2013-05-13'),
(1314    ,4    ,'2013-07-01','2014-05-09'),
(1415    ,4   ,'2014-06-23','2015-05-08'),
(1516    ,4   ,'2015-07-06','2016-05-09'),
(1617    ,4   ,'2016-04-11','2017-05-01');

重叠时间范围的标准模式如下:

SELECT * 
  FROM ayear 
 WHERE '2016-05-06' > block_start_date 
   AND '2016-04-11' < block_end_date;
+------+-------+------------------+----------------+
| ay   | Block | Block_start_date | Block_end_date |
+------+-------+------------------+----------------+
| 1516 |     4 | 2015-07-06       | 2016-05-09     |
| 1617 |     4 | 2016-04-11       | 2017-05-01     |
+------+-------+------------------+----------------+

关于mysql 日期比较不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978541/

相关文章:

mysql - 从分组(?)sql查询的第一个排序成员中获取值

php - 如何求平均值并显示数值?

mysql - SQL 内连接和多行连接

mysql - Perl DBI如何准备单个插入多行

php - 显示用户表和潜在客户表中的数据

java - MySQL:超出范围,但该列不是最后一个?

mysql - 需要帮助创建查询来汇总表中出现的次数

sql - MySQL 错误代码 : 1005

php - 更新多维数组sql php

php mysql 下拉列表