从一列中获取最小值,从另一列中只获取一次具有最小秩的每个值



问题:我们只想要每个df的最小jobrank。然后,在这些工作中,我们希望每个工作都出现,但只出现一次最小mf值。这是我的桌子结构我有一张表格,里面有DF条目。让我们称之为DfTable

DF
1
2
3

另一个表2如下

MF  DF   Job  JobRank
-------------------
1   1    1     1
2   1    1     1
3   1    2     1
4   2    3     2
5   3    4     3
6   3    5     4

MF是唯一的,DF可以是多个。

输出应该是:MF应该是唯一的,DF应该是每个具有最小等级的作业唯一的。

MF  DF   Job
-------------
1   1    1
3   1    2
4   2    3
5   3    4

到目前为止,这就是我所拥有的:

Select T2.MF, T1.DF, T2.Job
From table1 As T1
Inner Join table2 As T2 On T1.DF = T2.DF
Where JobRank = (
Select Min(JobRank)
From table2 As T3
Where T3.DF = T2.DF
)

我想我现在明白了。每个df只需要最小的jobrank。然后,在这些作业中,您希望每个作业都出现,但只出现一次具有最小mf值的作业。

这里有一个使用窗口函数的方法:

select t.*
from (select t.*,
row_number() over (partition by df, job, jobrank order by mf) as seqnum_djj,
min(jobrank) over (partition by df) as min_jobrank
from t
) t
where seqnum_djj = 1 and jobrank = min_jobrank;

这里有一个db<gt;不停摆弄

最新更新