我想要两个日期范围之间相交的日期数。例如,如果一个日期范围为01/11/2014 - 25/11/2014,第二个日期范围为25/10/2014 - 10/11/2014,而相交日期号为10(01/11/2014 -10/11/2104),我可以编写一个mysql查询来获得结果。我的表结构是记录(sfid、date1 date、date2 date)。
我想输入一个日期范围,并希望得到与之相对应的输入日期范围的sfid和相交日期编号。
发布于 2014-11-14 14:28:34
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 |
+------------+------------+------+..。或者类似的东西。
https://stackoverflow.com/questions/26931912
复制相似问题