Я полагаю, что вы можете взять следующий SQL в качестве основы и изменить его в соответствии со своими потребностями:
SELECT CALENDAR_DATE
, MAX(CALENDAR_DATE)
OVER(PARTITION BY 1 ORDER BY CALENDAR_DATE
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS Lag_ --Yesterday
, MIN(CALENDAR_DATE)
OVER(PARTITION BY 1 ORDER BY CALENDAR_DATE
ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS Lead_ --Tomorrow
FROM SysCalendar.CALENDAR
WHERE year_of_calendar = 2011
AND month_of_year = 11
NULL возвращается, когда нет записи до или после, и может быть обработан с помощью COALESCE какнеобходимо.
РЕДАКТИРОВАТЬ В Teradata 16.00 были введены функции LAG / LEAD.