2012-03-15 2 views
3

У меня есть таблица в MySQL, который содержит мин и макс значения даты для каждого ключа:MySQL: Расширьте диапазон дат в строки

key | minDate | maxDate 
1  2011-01-01 2011-01-10 
2  2011-02-13 2011-02-15 
3  2011-10-19 2011-12-10 

Как я могу создать новую таблицу, которая содержит одну строку для каждой даты между MinDate и MaxDate для каждого из ключей:

key |  Date 
1  2011-01-01 
1  2011-01-02 
...  ... 
1  2011-01-10 
2  2011-02-13 
2  2011-02-14 
2  2011-02-15 
3  2011-10-19 
...  ... 

ответ

0

из памяти, это может быть что-то вроде этого:

create table #res (
key int, 
Date datetime 
) 

declare @minD datetime, @maxD datetime 
select @minD = min(minDate), @maxD = max(maxDate) from tablename 

while @minD <= @maxD do 
    insert into #res 
    select key, @minD from tablename where @minD >= minDate and @minD <= maxDate 

    select @minD = dateadd(@minD, interval 1 day) 
end while; 

select key, Date from #res 

drop table #res 
3

Usin г в integers table, вы можете сделать это:

SELECT "key", minDate + INTERVAL i DAY 
     FROM mytable 
INNER JOIN integers 
      ON i <= DATEDIFF(maxDate, minDate) 

Это предполагает, что таблица «целые» имеет свой столбец с именем «я», конечно.

Оттуда вы можете заполнить свой новый стол INSERT INTO ... SELECT.

Смежные вопросы