在1个前面和1个之前的行之间的行



我是SQL的新手此功能是在开始日期和结束日期之间获得历史表中时间差距的测试柜,任何人都可以帮助或提供任何有用的链接。

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的LAG(END_dt) OVER (PARTITION BY CUST_ID ORDER BY END_dt相同的结果,即上一行的END_dt(或每个CUST_ID的第一行(。

切换到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

假设我们正在处理(a(前面(a(和(b(先前'之间的查询'行。在您的情况下,a = 1和b = 1。因此,在这里(a(正如我们期望的那样,也就是说,它指定了将要包含的行数与当前行一起执行我们提到的聚合函数。现在来(b(,它指定了在执行我们指定的汇总函数时将排除在随附的行中的行数(从下方(。


为了更好地理解,请考虑A = 3和B = 1,当前我们正在对第7行进行汇总功能。然后,当A = 3时,我们需要考虑4,5,6,7行才能执行聚合功能。现在b = 1说,在执行提到的骨料函数时,应将1行排除在选定的行中,即4,5,6,7。在我们的案例中(4,5,6,7(第7行应排除在外。因此,我们将在剩余行中执行汇总功能,即4,5,6行。

希望您理解:(

最新更新