根据列值从行组中选择行

时间:2018-07-06 16:42:00

标签: sql oracle greatest-n-per-group

有下表

PkId   ProfileId    Status   Amount
1         234          0      10
2         235          1      100
3         236          0      50
4         236          1      80
5         237          0      70

对于第3行和第4行,配置文件ID相同,但我希望在结果集中它应考虑行的值为0,因此,无论我们有哪些配置文件ID相同的行,都应选择状态为= 0的行,对于其余行,应该按原样选择。

预期结果集:

 PkId   ProfileId    Status   Amount
    1         234          0      10
    2         235          1      100
    3         236          0      50
    5         237          0      70

在预期结果集中,必须省略第4行,因为:

  1. 第4行的236 ID已经存在第3行
  2. 状态值在第4行中为1。

1 个答案:

答案 0 :(得分:0)

您可以在子选择上使用联接以获取最低状态

select * from my_table m
inner join (
select ProfileId ,   min(Status ) min_status
from my_table 
group by ProfileId
) t on t.profileId = m.profileId and t.min_status = m.status