我想获得两个日期范围之间相交的日期数。例如,如果一个日期范围是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和相交日期编号。
答案 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 |
+------------+------------+------+
......或类似的东西。