【问题标题】:Select most recent increase in value column by ID按 ID 选择最近增加的值列
【发布时间】:2017-11-06 08:48:39
【问题描述】:

我正在尝试一个简单的子集,但在同时应用我的两个条件时遇到了一些麻烦。我希望为每个唯一 ID 选择值列增加的最新记录。例如,这是我的数据的简化版本。

ID| Date | Value
A  1/1/17  100
A  1/2/17  185
A  1/3/17  40
A  1/4/17  100
A  1/5/17  30
B  1/3/17  40
B  1/4/17  30
B  1/5/17  65
B  1/6/17  80
B  1/7/17  0
B  1/8/17  0

虽然我想要的输出将是每个 ID 最后一次增加 Value 的行

ID| Date | Value
A  1/4/17  100
A  1/6/17  80

有人对我如何实现我想要的输出有一些见解吗?谢谢。

【问题讨论】:

    标签: sql subset teradata


    【解决方案1】:

    你可以试试这个。

    select id,dt,value 
    from (select t1.*
          ,max(case when t2.value<t1.value then t1.dt end) over(partition by t1.id) as max_dt 
          from (select t.*,min(dt) over(partition by id order by dt rows between 1 preceding and 1 preceding) as prev_dt
                from t
               ) t1
          join t t2 on t1.prev_dt=t2.dt and t1.id=t2.id             
         ) t
    where max_dt=dt  
    

    【讨论】:

      【解决方案2】:

      两步:

      select t.*
      from (select t.*,
                   row_number() over (partition by id order by date desc) as seqnum
            from (select t.*,
                         max(value) over (partition by id order by date rows between 1 preceding and 1 preceding) as prev_value
                  from t
                 ) t
            where prev_value < value
           ) t
      where seqnum = 1;
      

      在 Teradata 中,您还可以使用 qualify 删除一级子查询。

      【讨论】:

      • 我认为您不能在 teradata 中使用 lag
      • 我在使用我的 Value 列的语句部分遇到了一些问题。也许这与处于滞后功能有关。错误显示“数据类型“值”与定义的类型名称不匹配”。我确实看到一些页面表明 teradata 中不存在 lag()。
      • LAG() 和 LEAD() 未在 Teradata 的当前版本中实现。定义正确的窗口后,可以使用 MAX() 来完成与 vkp 演示的相同的事情。
      • 您能否详细说明如何使用 MAX 代替?如果我只是简单地将 lag() 替换为 MAX,我将创建一个列,对于每个 ID,该列包含曾经发生的 Value 的最大值。
      • @RobPaller 。 . .我明白了。 LAG()LEAD() 是 ANSI 标准。 Teradata 没有理由将它们排除在外,尤其是考虑到它们只是已实现功能的语法糖。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多