2014-06-17 3 views
2

start_date, end_date 및 빈도가있는 테이블이 있습니다. MySQL 쿼리를 사용하여 start_date와 end_date 사이의 모든 날짜가있는 여러 행을 생성하려고합니다. 다음 표는 다음과 같습니다 MySQL에서 시간 간격을두고 단일 행에서 여러 행을 작성하는 방법

ID | start_date | end_date | frequency 
---------------------------------------- 
1 | 1402876800 | 1403049600 | daily 

지금 나는 다음과 같은 쿼리 출력을 원하는 :

active_date | start_date | end_date | frequency 
-------------------------------------------------- 
1402876800 | 1402876800 | 1403049600 | daily 
1402963200 | 1402876800 | 1403049600 | daily 
1403049600 | 1402876800 | 1403049600 | daily 

모든 날짜는 타임 스탬프 값에 있습니다.

미리 감사드립니다.

+0

어쨌든 1 개의 테이블로만 할 수 있습니까? – neobie

+0

아무 것도 얻지 못했습니다. 그러나 절차를 사용함으로써, 그것은 성취 가능합니다. – Sovon

답변

0

가장 간단한 방법은, 예를 들어, 날짜 테이블을 만들고 상태 사이를 사용하여 조인하는 것입니다

SELECT d.date AS active_date, t.start_date, t.end_date, t.frequency 
FROM {your_table} AS t 
INNER JOIN {date_lookup_table} AS d 
ON d.date BETWEEN t.start_date AND t.end_date 
또한 날짜를 가진이 ...하지만 내 경험을 계산하는 절차를 사용할 수

조회 테이블은 일반적으로 매우 유용합니다. 특히 월 및 연도를 추가하는 것과 같은 일을하는 경우 특히 그렇습니다. 사용하고 문제를 해결하는 것이 훨씬 간단합니다. 그것이 나라면, 나는 데이트 룩업 테이블을 추가하고, 날짜에 인덱스가 있는지 확인하고 계속 진행할 것입니다.

+0

솔루션을 제공해 주셔서 감사합니다. 그러나 date_lookup_table의 구조는 무엇이 될까요? 이 테이블에 연도 값이 포함되어 있으므로 다가오는 날짜에 cron 작업을 실행해야합니까? – Sovon

+0

내가 저라면 datetime, date {yyyy-mm-dd}, {1, 2, 3} 등의 분기, {1, 2 등} 년 {1970, 1971, 기타}. cron 작업 대신 Excel에서이 모든 내용을 생성하고 1970 년부터 2100 년까지 진행합니다. MySQL로 가져옵니다. 모든 열에 색인을 추가하십시오. 해당 테이블을 작성하고이를 SQL로 가져오고 열을 추가하는 데 약 10 분이 소요됩니다. 적어도 필자의 경험으로 볼 때, 특히 데이터를 사용하여 비즈니스 리포팅을 수행하는 경우 테이블의 재사용이 많이 발생합니다. – evanv

관련 문제