2014-11-14 3 views
0

두 날짜 범위 사이에 교차 한 날짜 수를 가져 오려고합니다. 예를 들어 하나의 기간이 2010 년 11 월 1 일부터 2010 년 12 월 25 일까지이며 두 번째 기간이 2014 년 10 월 25 일 2510 년 10 월 11 일이고 교차 된 날짜가 10 일인 경우 (2014 년 1 월 11 일 -10/11/2104). 결과를 얻으려면 어떻게 mysql 쿼리를 작성할 수 있습니까? 내 테이블 구조는 레코드 (sfid int, date1 date, date2 date)입니다.두 날짜 범위의 교차에 대한 날짜 수

하나의 날짜 범위를 입력하고 해당 입력 날짜 범위에 대해 sfid와 교차 된 날짜 번호를 가져 오려고합니다.

+1

테이블 구조를 공유 할 수 있습니까? – Mureinik

답변

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

딸기를 해줘서 고마워. 그것은 올바른 결과를 주었다. 다시 한번 감사합니다. –