基于多个字段的嵌套最小值获取行



如何根据多个字段的(嵌套)最小值进行查询以获取行?

有一个表格的行的形式:

[a, b, c, id, date, line, code, d, e]

id、日期、行和代码之间的关系是:

one(id)->many(date)->many(line)->one(code)

想要将id映射到对应于最小日期的最小行的code,因此给定一个表,如:

[a1, b1, id1, date11,            line111,             code1]
[a2, b2, id1, date12 (= date11), line122 (< line111), code2]
[a3, b3, id2, date21,            line211,             code3]
[a4, b4, id2, date22 (< date21), line221 (> line211), code4]
Where 
idX => "Xth id", 
dateXY => "Yth date of Xth id", 
and lineXYZ => "Z line of the Yth date of the Xth id".

最终会得到一张这样的表格:

[a2, b2, id1, date11, line122, code2]
[a4, b4, id2, date22, line221, code4]

希望这不是重复的(无法从嵌套最小值的初步谷歌搜索中找到解决方案)。

谢谢。

让我们将其分解为手头的较小问题。

  1. row_number()应用于[line][date]列,按顺序排列,使第1行是您所描述的"最小值"。

  2. 然后简单地从表中select,其中两个行#都是1。

类似的东西(这是在记事本中写的,可能不会编译,也可能不会根据您的需求订购):

;with c as (
select
id
,line
,row_number() over (partition by id order by date asc, line asc) as rn
from
dbo.yourTable
)
select
id
,line
from
c
where
rn = 1

最新更新