按ID选择最近的增值值列

时间:2017-06-05 14:31:47

标签: sql subset teradata

我正在尝试一个简单的子集,但在同时应用我的两个条件时遇到了一些麻烦。我希望为每个唯一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的最后一次增加值的行

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

有没有人对如何实现我想要的输出有一些了解?感谢。

2 个答案:

答案 0 :(得分:0)

两个步骤:

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删除一级子查询。

答案 1 :(得分:0)

你可以试试这个。

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