2013-04-02 5 views
0

Мне нужно дублировать записи из данных недельного уровня и отталкивать их назад, чтобы они заполнили данные на прошлой неделе. Поэтому я получаю строку на 1/6, которая является субботой, а затем заполняю все столбцы, чтобы иметь те же данные, кроме даты до 1/1 (воскресенье).Дублирующие записи для диапазона дат

Так что мой источник дата, информация 1/6, цель

должен быть 1/7, б | 1/6, a | 1/5, a | 1/4, a | 1/3, a | 1/2, a | 1/1, a

** Извините за формат, не удалось его корректно отобразить.

До сих пор лучшие способы я думал сделать это либо с помощью нескольких профсоюзных Alls

SELECT date, info FROM test 
UNION ALL 
SELECT date - 1, info FROM test 
UNION ALL 
SELECT date - 2, info FROM test 

ЭСТ.

или сделать управляемый декартовой присоединиться

SELECT tmp_date AS date, info FROM test AS test 
INNER JOIN date_temp_table AS dt 
    ON dt.tmp_date <= test.date 
    AND dt.tmp_date > test.date - 7 

Теперь оба вышеуказанных методов работы, однако они оба очень неэффективно и почти убить мою базу данных (Teradata) Так им открыты для любых идей о том, как улучшить это.

+0

Поскольку 'date' является зарезервированным словом, Я предполагаю, что это всего лишь пример, правильно? – BellevueBob

ответ

0

Это трудно понять, что вы на самом деле хотите, но в TD13.10 легко повторить строки на основе периодов, используя расширить:

SELECT 
    BEGIN(pd) AS dt, 
    info 
FROM test 
EXPAND ON PERIOD(datecol-7, datecol) AS pd 

Dieter

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