如何根据多个字段的(嵌套)最小值进行查询以获取行?
有一个表格的行的形式:
[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]
希望这不是重复的(无法从嵌套最小值的初步谷歌搜索中找到解决方案)。
谢谢。
让我们将其分解为手头的较小问题。
-
将
row_number()
应用于[line]
和[date]
列,按顺序排列,使第1行是您所描述的"最小值"。 -
然后简单地从表中
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