两个日期范围的交叉点的日期计数

时间:2014-11-14 14:11:40

标签: mysql

我想获得两个日期范围之间相交的日期数。例如,如果一个日期范围是2014年11月1日 - 2014年11月25日,第二个日期范围是25/10/2014 - 10/11/2014,相交的日期编号是10(2014年11月1日 - 10 / 11/2104)。如何编写mysql查询以获得结果。我的表结构是                      记录(sfid int,date1 date,date2 date)。

我想输入一个日期范围,并希望获得相应输入日期范围的sfid和相交日期编号。

1 个答案:

答案 0 :(得分:1)

 DROP TABLE IF EXISTS my_table;

 CREATE TABLE my_table (event_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,start_date DATE,end_date DATE);

 INSERT INTO my_table VALUES (1,'2014-10-25','2014-11-10'),(2,'2014-11-01','2014-11-25');

 SELECT * FROM my_table;
 +----------+------------+------------+
 | event_id | start_date | end_date   |
 +----------+------------+------------+
 |        1 | 2014-10-25 | 2014-11-10 |
 |        2 | 2014-11-01 | 2014-11-25 |
 +----------+------------+------------+

 SELECT GREATEST(x.start_date,y.start_date) start
      , LEAST(x.end_date,y.end_date) end
      , DATEDIFF(LEAST(x.end_date,y.end_date),GREATEST(x.start_date,y.start_date)) diff 
   FROM my_table x 
   JOIN my_table y 
     ON y.event_id > x.event_id 
    AND y.start_date < x.end_date 
    AND y.end_date > x.start_date;
 +------------+------------+------+
 | start      | end        | diff |
 +------------+------------+------+
 | 2014-11-01 | 2014-11-10 |    9 |
 +------------+------------+------+

......或类似的东西。