Эквивалент терадаты для опережающей и запаздывающей функции оракула - PullRequest
6 голосов
/ 14 ноября 2011

Я работал, чтобы увидеть эквивалентную функцию для опережающих и отстающих функций Oracle.

Свинец оракула будет выглядеть как

LEAD(col1.date,1,ADD_MONTHS(col1.DATE,12)) 
OVER(Partition By tab.a,tab.b,tab.c Order By tab.a)-1 END_DATE

LAG(col1.DATE + 7,1,col1.DATE-1) 
OVER(partition by tab.a,tab.b Order By tab.b) LAG_DATE

Любая лучшая идея

1 Ответ

9 голосов
/ 15 ноября 2011

Я полагаю, что вы можете взять следующий 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.

...