代码之家  ›  专栏  ›  技术社区  ›  Aegletes

如果SQL Server中的另一列相同,则获取列值最小的行

  •  1
  • Aegletes  · 技术社区  · 6 年前
    Id  Number  Value
    ------------------
    1     6       1
    2     6       2
    3     9       2
    

    我有一个这样的表,基本上,我需要返回最小的一行 Value Number 列相同,我需要的示例结果如下:

    Id  Number  Value
    -----------------
    1     6       1
    3     9       2
    

    如何在T-SQL中实现这一点?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mureinik    6 年前

    你可以用这个 rank

    SELECT id, number, value
    FROM   (SELECT id, number, value, RANK() OVER(PARTITION BY number ORDER BY value) AS rk
            FROM   mytable)
    WHERE  rk = 1
    

    编辑:
    如评论中所述,如果有多行 value ,使用 两者都会返回。如果您只想归还其中一个,您应该使用 row_number 取而代之的是:

    SELECT id, number, value
    FROM   (SELECT id, number, value,
                   ROW_NUMBER() OVER(PARTITION BY number ORDER BY value) AS rn
            FROM   mytable)
    WHERE  rn = 1