我需要创建一个查询,该查询仅返回特定列中具有最小值的行。
我有此结果(示例):
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。
如果要使用一个简单的子查询,则关闭第二个查询:
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