admin

SQL | 返回MIN值| 动态多行

sql

我需要创建一个查询,该查询仅返回特定列中具有最小值的行。

我有此结果(示例):

Name  |  Description  | Order
-----------------------------
Name1 |  A            | 1
Name1 |  B            | 2
Name1 |  C            | 3
Name2 |  A            | 1
Name2 |  B            | 2
Name2 |  C            | 3

我想得到以下结果:

Name  |  Description  | Order
-----------------------------
Name1 |  A            | 1
Name2 |  A            | 1

基本上,我只需要选择列 顺序中 具有最小值的行。

我陷入查询 Query A之类的问题

Select Top 1 *
From table1
Where Name = 'Name1'
Order by Order

查询B

Select *
From table1
Where Name = 'Name1'
 and order = (Select min(Order)
              From table1
              Where Name = 'Name1')

我需要的是在单个查询中具有为多个名称返回行的功能,而不必对每个名称进行查询。在 查询B 的示例中,有什么方法可以将属性值传递给子 查询

有哪些选择?

该平台是SQL Server 2012。


阅读 34

收藏
2021-06-07

共1个答案

admin

如果要使用一个简单的子查询,则关闭第二个查询:

Select *
From table1 t1
WHERE [order] = (Select min([Order])
             From table1
             Where Name = t1.Name)

您还可以使用分区功能为每个组查找“第一”记录:

SELECT Name, Description, [Order] FROM
    (SELECT *,
        ROW_NUMBER() OVER(ORDER BY [Order] PARTITION BY Name) RowNum
     FROM Table1 
    ) A
WHERE RowNum = 1
2021-06-07