我有一张这样的表
id date Label
1 01.01.2018 abc
1 02.01.2018 ade
1 31.12.2017 bde
1 03.01.2018 tm
2 02.02.2018 lkj
2 03.02.2018 dyj
2 05.02.2018 tm
2 04.02.2018 tm
3 02.01.2018 ui
3 04.02.2018 ght
3 03.02.2018 kiu
3 06.02.2018 hft
3 08.02.2018 ghu
3 01.12.2017 gfdt
我需要应用逻辑,就像每当label = tm根据最新日期按ID分组时,我需要获取label = tm之前的行,如果标签不等于tm根据最新日期按ID分组 然后根据最新日期检索行
id date Label
1 01.01.2018 abc
**1 02.01.2018 ade**
1 31.12.17 bde
1 03.01.18 tm
2 02.02.2018 lkj
**2 03.02.2018 dyj**
2 05.02.2018 tm
2 04.02.2018 tm
3 02.01.2018 ui
3 04.02.2018 ght
3 03.02.2018 kiu
3 06.02.2018 hft
3 **08.02.2018 ghu**
3 01.12.2017 gfdt
我的结果表应该是
id date Label
1 02.01.2018 ade
2 03.02.2018 dyj
3 08.02.2018 ghu
我需要在sql中应用循环吗? 我不知道如何通过id在over partition上应用循环 请帮我
答案 0 :(得分:0)
我认为您只需删除Label = tm
的行,然后搜索每个ID的最大日期
select
id, date, label
from (
select
*, rn = row_number() over (partition by id order by date desc)
from
myTable
where
label <> 'tm'
) t
where
rn = 1