【问题标题】:Excluding same type of transactions within 3 seconds3秒内排除同类型交易
【发布时间】:2021-09-09 05:39:54
【问题描述】:

比如下面的表格

Type Time Stamp Result
1 2021-06-25 14:21:00 A
1 2021-06-25 14:21:03 B
1 2021-06-25 14:21:06 C
1 2021-06-25 14:23:00 D
2 2021-06-25 14:21:02 C
2 2021-06-25 14:21:06 C
2 2021-06-25 14:21:09 D
3 2021-06-25 14:21:06 E

我想要的结果如下。 如果每 3 秒或更短的时间内有一系列相同类型的事务,我将只打印最后一个。

Type Time Stamp Result
1 2021-06-25 14:21:06 C
1 2021-06-25 14:23:00 D
2 2021-06-25 14:21:02 C
2 2021-06-25 14:21:09 D
3 2021-06-25 14:21:06 E

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    基本上,您需要相同类型的下一个行提前超过三秒的行:

    select t.*
    from (select t.*,
                 lead(timestamp) over (partition by type order by timestamp) as next_timestamp
          from t
         ) t
    where next_timestamp is null or
          next_timestamp > timestamp + interval '3' second;
    

    【讨论】:

    • @AlbertoSinigaglia 。 . .这就是代码使用partition by type的原因。
    • 对不起,我的眼睛拒绝看到那部分
    【解决方案2】:

    使用默认的 LEAD 和 Teradata 的专有 QUALIFY 关键字来简化 Gordon 的查询:

    select *
    from vt
    qualify 
       lead(timestamp, 1, date '9999-12-31')
       over (partition by type
             order by timestamp) > timestamp_ + interval '3' second;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2020-06-08
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多