SSMS 中针对多列查询的最小函数

Min function in SSMS on query with multiple columns

正在努力使用 MIN 函数。需要在具有最小值的行上获取其他值。换句话说,我有一个父项、一个子项和一个数量。我需要父项、子项和子项的数量。

Parent  Child   Value
A   AB  1
A   BC  2
A   CD  3
B   AB  4
B   BC  5
B   EE  6
C   AB  2
C   EE  4

查询结果应return

Parent  Child   Value
A   AB  1
B   AB  4
C   EE  4

AB 重复是可以的(因为它对父级是唯一的)。我的 'group by' 没有用,我怀疑我需要使用 over by 子句可能,partition by...

下面的 SQL 并非 100% 有效。我认为 Min_Qty 是正确的,但是 Child 是随机的,而不是附属于 Qty 的子项并且得到太多的行结果。

SELECT  Parent,
        Child,
        MIN(Qty) OVER (PARTITION BY Child) AS Min_Qty
FROM #Temp
GROUP BY Parent, Child, Qty

如前所述,您可以使用 window 函数并分配按数量排序的行号。然后得到所有的RowNum = 1.

RexTester Demo

;WITH cte AS (
SELECT 
    *
  , ROW_NUMBER() OVER (PARTITION BY Parent ORDER BY Qty ASC) AS RowNum 
FROM YourTable
)

SELECT
    Parent
  , Child
  , Qty
FROM cte WHERE rownum = 1

您也可以进行简单的自我加入

declare @tmp table
(
parent char(1),
child char(2),
age smallint
);
insert into @tmp VALUES('A', 'AB', 1);
insert into @tmp VALUES('A', 'BC', 2);
insert into @tmp VALUES('A', 'CD', 3);
insert into @tmp VALUES('B', 'AB', 4);
insert into @tmp VALUES('B', 'BC', 5);
insert into @tmp VALUES('B', 'EE', 6);
insert into @tmp VALUES('C', 'AB', 6);
insert into @tmp VALUES('C', 'EE', 4);

SELECT t.parent, t.child, t.age from @tmp t INNER JOIN 
(SELECT parent, Min(age) as MinAge from @tmp GROUP BY parent)
g on g.parent = t.parent and g.minage = t.age

注意我已经更改了你的c的数据,所以EE是被选中的。使用您的数据,您也可以获得 C 的 AB!