前 1 行和前 1 行之间的行

Amr*_*san 1 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
Run Code Online (Sandbox Code Playgroud)

dno*_*eth 5

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

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

双方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
Run Code Online (Sandbox Code Playgroud)