我需要创建一个查询,仅返回特定列中具有最小值的行。
我有这个结果(示例):
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
基本上,我只需要选择列中具有最小值的行order.
我被这样的查询困住了Query A:
Select Top 1 *
From table1
Where Name = 'Name1'
Order by Order
Or Query B:
Select *
From table1
Where Name = 'Name1'
and order = (Select min(Order)
From table1
Where Name = 'Name1')
我需要的是在单个查询中能够返回多个名称的行,而不必对每个名称进行查询。有什么方法可以将属性值传递给示例中的子查询Query 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)