2014-11-14 66 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