根据多个字段的嵌套最小值获取行

时间:2017-11-08 21:32:02

标签: sql sql-server

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

有一个包含表格行的表格:

[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搜索解决方案)。

感谢。

1 个答案:

答案 0 :(得分:1)

让我们把这一点分解为手头的小问题。

  1. row_number()应用于[line][date]列,并按顺序排列,以便第1行是您描述的“最小值”。

  2. 然后只是表格中的select,其中两行#都是1.

  3. 类似的东西(这是用记事本写的,可能无法编译,可能无法根据您的需求订购):

    ;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