前1和前1之间的行

时间:2018-02-14 10:20:02

标签: teradata teradata-sql-assistant

我是SQL的新手,我想知道teradata中的函数(前面的1和前面的1之间的行)究竟是做什么的,我想要一个简单的说明,我想用这个函数作为测试用例来获取历史表中起始日期和结束日期之间的时间差距,任何人都可以帮助请求或提供任何有用的链接。

SELECT DISTINCT CUST_ID
FROM
(
SELECT 
CUST_ID,
STRT_dt - 
MIN(END_dt) OVER (PARTITION BY CUST_ID ORDER BY END_dt
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS diff
FROM table
QUALIFY diff > 1
) dt

1 个答案:

答案 0 :(得分:4)

返回与标准SQL LAG(END_dt) OVER (PARTITION BY CUST_ID ORDER BY END_dt相同的结果,即前一行END_dt(或每个CUST_ID第一行为NULL)。

当您切换到FOLLOWING而不是PRECEDING时,它是标准SQL中的下一行LEAD

LAGLEAD最终都在TD16.10中实现。

由于您只是想找到差距并且您无法获取实际差异,因此您还可以将其简化为:

SELECT DISTINCT CUST_ID
FROM table
QUALIFY
   STRT_dt - 
   MIN(END_dt)
   OVER (PARTITION BY CUST_ID
         ORDER BY END_dt
         ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) > 1