我正在尝试一个简单的子集,但在同时应用我的两个条件时遇到了一些麻烦。我希望为每个唯一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
有没有人对如何实现我想要的输出有一些了解?感谢。
答案 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