Спасибо за ваши ответы.Я опробовал RECURSIVE VIEW для вышеуказанного требования и дает правильные результаты (я опасаюсь использования ЦП для больших таблиц, так как это рекурсивно).Итак, вот запасная таблица
----------------------------------
Hour Location Stock
----------------------------------
6 2000 20
9 2000 24
----------------------------------
. Затем мы увидим эту таблицу, которая даст данные за все 12 часов, используя левое внешнее соединение.
----------------------------------
Hour Location Stock
----------------------------------
6 2000 20
7 2000 NULL
8 2000 NULL
9 2000 24
----------------------------------
Тогда мы получим рекурсивныйпредставление, которое рекурсивно объединяет таблицу с тем же представлением, чтобы получить запас каждого часа, перемещенный на один час вверх и дополненный уровнем поступающих данных.
REPLACE RECURSIVE VIEW HOURLY_STOCK_VIEW
(HOUR_NUMBER,LOCATION, STOCK, LVL)
AS
(
SELECT
HOUR_NUMBER,
LOCATION,
STOCK,
1 AS LVL
FROM STOCK_VIEW_WITH_LEFT_OUTER_JOIN
UNION ALL
SELECT
STK.HOUR_NUMBER,
THE_VIEW.LOCATION,
THE_VIEW.STOCK,
LVL+1 AS LVL
FROM STOCK_VIEW_WITH_LEFT_OUTER_JOIN STK
JOIN
HOURLY_STOCK_VIEW THE_VIEW
ON THE_VIEW.HOUR_NUMBER = STK.HOUR_NUMBER -1
WHERE LVL <=12
)
;
Вы можете наблюдать, что сначала мы выбираем слева снаружиобъединенный вид, затем мы объединяем его с левым внешним видом объединения, объединенным в том же самом представлении, которое мы создаем, и присваиваем ему уровень, на котором поступают данные.
Затем мы выбираем данные из этого представления с минимальным уровнем.
SEL * FROM HOURLY_STOCK_VIEW
WHERE
(
HOUR_NUMBER,
LVL
)
IN
(
SEL
HOUR_NUMBER,
MIN(LVL)
FROM HOURLY_STOCK_VIEW
WHERE STOCK IS NOT NULL
GROUP BY 1
)
;
Это работает нормально и дает результат как
----------------------------------
Hour Location Stock
----------------------------------
6 2000 20
7 2000 20 -- same as hour 6 stock
8 2000 20 -- same as hour 6 stock
9 2000 24
10 2000 24
11 2000 24
12 2000 24
----------------------------------
Я знаю, что для получения рекурсивной работы потребуется огромный процессор для больших таблиц (мы ограничиваемрекурсия только к 12 уровням, так как данные за 12 часов необходимы для того, чтобы они не переходили в бесконечный цикл).Но я думал, что какое-то тело может использовать это для своего рода построения Иерархии.Я буду искать ответы от вас, ребята, о любых других доступных подходах.Благодарю.Вы можете взглянуть на Рекурсивные виды по ссылке ниже для teradata.http://forums.teradata.com/forum/database/recursion-in-a-stored-procedure