Teradata 介于1之前和1之前的行之间

Teradata 介于1之前和1之前的行之间,teradata,teradata-sql-assistant,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 P

我是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

这返回的结果与标准SQL的滞后(END_dt)OVER(按客户ID按END_dt进行分区)相同,即前一行的
END_dt
(或每个客户ID的第一行为NULL)

当您切换到
后面
而不是
前面
时,它是标准SQL中的下一行

LAG
LEAD
最终都在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

这返回的结果与标准SQL的滞后(END_dt)OVER(按客户ID按END_dt进行分区)相同,即前一行的
END_dt
(或每个客户ID的第一行为NULL)

当您切换到
后面
而不是
前面
时,它是标准SQL中的下一行

LAG
LEAD
最终都在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