2014-11-14 78 views
0

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

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

+1

你可以分享你的表格结构吗? – Mureinik 2014-11-14 14:12:42

回答

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 | 
+------------+------------+------+ 

...或类似的东西。

+0

谢谢草莓的答案。它给出了正确的结果。再次感谢。 – 2014-11-15 03:02:56