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.
;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!
正在努力使用 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.
;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!