SQL 日期智能:从最后一个已知的有效结果按秒 运行 过滤数据

SQL Date intelligence: filtering data by seconds ran from last known valid result

求助!我们正在尝试创建一个新列(是否有效?)以重现以下逻辑。

这是一个二进制结果:

注1:这不是与之前记录相差的秒数

注2:数据集中ID较多

注3:原始数据集有ID和Date

附上数据的 PoC 和预期结果。

您必须使用递归 CTE 来执行此操作,这非常昂贵:

with tt as (
      select t.*, row_number() over (partition by id order by time) as seqnum
      from t
     ),     
     recursive cte as (
      select t.*, time as grp_start
      from tt
      where seqnum = 1
      union all
      select tt.*,
             (case when tt.time < cte.grp_start + interval '3 second'
                   then tt.time
                   else tt.grp_start
               end)
      from cte join
           tt
           on tt.seqnum = cte.seqnum + 1
     )
select cte.*,
       (case when grp_start = lag(grp_start) over (partition by id order by time)
             then 0 else 1
        end) as isValid
from cte;