2012-05-21 3 views
0

Доступен только Teradata SQL.Найти следующее согласованное значение в списке

Я пытаюсь динамически создавать список дат, на которых будут выполняться задания. Вот упрощенная версия того, что я имею в виду.

Calendar (covers 2012+) 
-------- 
Calender Date 
Business Day Flag - 1 = This is a Business Day, 0 = Weekend 
Holiday Flag - 1 = This is a Holiday, 0 = Non-Holiday 
Year 
Month 
Day 

Schedule (several more fields available, but not relevant) 
-------- 
Day Type - Business Day or Calendar Date 
Day Number - Represents either a Business or Calendar Day 
Eligible to run on holiday - Yes/No 

Logic осуществляется через саз в выбранном

when d.day_type = 'BD' and day_num = c.business_day_of_month then 'Y' 
when d.day_type = 'CD' and day_num = c.day_of_month then 'Y' 
else 'N' as run_flag 

Однако, когда run_flag = «Y» и Holiday_Flag = 1, то задание должно быть перечислены для работы на следующем Бизнесе/Календарный день (в зависимости от типа day_type).

Я думаю, что мне нужно использовать свинцовое/отставание, но я не знаю, смогу ли я заставить его пройти через вовлеченную логику.

Любые идеи?

ответ

1

Попробуйте это:

select 
    a.calendar_dt, 
    min(b.dt) as next_business_dt 
from my_calendar a 
cross join my_calendar b 
where a.calendar_dt < b.calendar_dt 
and b.business_day_flag = 1 
and b.holiday_flag = 0 
group by 
    a.calendar_dt 
Смежные вопросы