【问题标题】:Teradata equivalent for lead and lag function of oracleoracle 的超前和滞后功能的 Teradata 等效项
【发布时间】:2011-12-28 19:31:03
【问题描述】:

我一直在努力寻找 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

有什么好办法

【问题讨论】:

    标签: sql oracle lag teradata lead


    【解决方案1】:

    相信你可以以下面的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解决。

    EDIT在 Teradata 16.00 中引入了 LAG/LEAD 函数。

    【讨论】:

    • 谢谢,我实际上是使用 coalesce 进行转换的。 COALESCE(MAX(CALENDAR_DATE) OVER(PARTITION BY 1 ORDER BY CALENDAR_DATE ROWS BETWEEN 1 PRECEDING 和 1 PRECEDING),ADD_MONTH(COL1.DATE,12)) AS Lag_ COALESCE(MIN(CALENDAR_DATE + INTERVAL '1' DAY) OVER(PARTITION BY 1 ORDER BY CALENDAR_DATE ROWS BETWEEN 1 FOLLOWING 和 1 FOLLOWING),(COL1.DATE- INTERVAL '1' DAY)) 作为潜在客户_
    • 仅供参考 - Teradata 16.x 现在原生包含 LEAD 和 LAG。
    猜你喜欢
    • 2011-12-19
    • 2015-05-28
    • 1970-01-01
    • 2014-09-14
    • 2015-06-27
    • 2015-06-13
    • 2019-10-09
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多