【发布时间】:2021-10-12 22:58:17
【问题描述】:
ID STRT_DT, ENT_DT
1 9/14/2020,10/5/2020
1 10/6/2020,10/8/2020
1 10/9/2020,12/31/2199
2 7/14/2020,11/5/2020
2 11/21/2020,11/22/2020
2 11/23/2020,12/31/2199
观察ID 1和2的上述数据,属于1的日期范围是连续的,ID 2是不连续的。我需要提取在 SQL 中连续的 ID。 预期的 o/p :如果任何日期范围不连续(按 ID 分组),则不应进入 select 子句。所以SQL输出的期望是得到ID=1
查询使用:
SELECT tab.ID,TAB.STRT_DT,TAB.ENT_DT,
STRT_DT - MIN(ENT_DT) OVER (PARTITION BY ID ORDER BY ENT_DT ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS diff,
ENT_DT - MAX(STRT_DT) OVER (PARTITION BY ID ORDER BY ENT_DT ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS diff2
FROM tabLE QUALIFY diff <> 1 OR diff2 <> -1
【问题讨论】:
-
您使用的是 Oracle 还是 Teradata?
-
你可以用
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING代替RANGE BETWEEN INTERVAL '1' DAY PRECEDING AND INTERVAL '1' DAY PRECEDING -
@jarlh 我正在使用 Teradata
-
@WernfriedDomscheit Order by 子句不适用于 RANGE
标签: sql teradata teradata-sql-assistant