如何根据多个字段的(嵌套)最小值来查询获取行?
有一个包含表格行的表格:
[a, b, c, id, date, line, code, d, e]
id,date,line和code之间的关系是:
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]
希望这不是重复(无法找到嵌套最小值的初步Google搜索解决方案)。
感谢。
答案 0 :(得分:1)
让我们把这一点分解为手头的小问题。
将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