2013-02-24 3 views
3

물론 서버 측 언어로이 작업을 수행 할 수 있지만 SQL 내에서 수행 할 수 있는지 궁금합니다.각각의 날짜로 날짜 범위를 선택하는 방법

+----+---------------------+---------------------+ 
| id |  date_from  |  date_to  | 
+----+---------------------+---------------------+ 
| 1 | 2013-02-27 00:00:00 | 2013-03-01 00:00:00 | 
| 2 | 2013-02-18 00:00:00 | 2013-02-20 00:00:00 | 
+----+---------------------+---------------------+ 

같은 일부 데이터 (모든 날짜 자정에있다)와

CREATE TABLE `dates` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `date_from` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `date_to` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
); 

내가 얻을 어떻게 든이 설정을 선택하고 싶습니다 :

나는 테이블이 같은이 back :

2013-02-27 00:00:00 
2013-02-28 00:00:00 
2013-03-01 00:00:00 
2013-02-18 00:00:00 
2013-02-19 00:00:00 
2013-02-20 00:00:00 

즉, 지정된 범위의 모든 날짜입니다.

아이디어가 있으십니까? 당신이 단일 쿼리로 시도 할 수 있습니다

+0

이 질문은 날짜 간격 채우기와 관련이 있습니다 http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/ –

+0

여기에서 저장 프로 시저를 살펴보십시오. http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates – aleroot

답변

1

는 (이 작업을 수행해야합니다) :

SELECT * FROM (
SELECT dates.date_from + INTERVAL a + b DAY dte 
FROM 
(SELECT 0 a UNION SELECT 1 a UNION SELECT 2 UNION SELECT 3 
    UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 
    UNION SELECT 8 UNION SELECT 9) d, 
(SELECT 0 b UNION SELECT 10 UNION SELECT 20 
    UNION SELECT 30 UNION SELECT 40) m, dates 
WHERE dates.date_from + INTERVAL a + b DAY <= dates.date_to 
ORDER BY a + b) e ORDER BY dte; 

SQL Fiddle를 살펴 보자.

Reference Post.

+0

그건 그냥 미친 짓이야. :) –

관련 문제