除分组数据外,还要提取其他数

时间:2016-08-02 22:51:22

标签: sql-server group-by greatest-n-per-group

我在Microsoft SQL中有一个看起来像这样的数据集

ID       Value1     Value2
1         8           4
1         4           2
1         9           3 
1         3           1
2         4           9
2         5           7
2         6           4
2         7           5
2         1           1

我试图仅从包含按ID号分组的第1列中的最大值的相应行中提取数据。结果应如下

ID     Value1   Value2
1        9         3
2        7         5

以下是我的尝试,但都没有成功。如果删除了Value2,它就可以工作。

USE [Database]
SELECT [ID],
       MAX([Value1]) as Value1,
       [Value2]
FROM [dbo].[Datatable]
GROUP BY [ID]

2 个答案:

答案 0 :(得分:1)

您是否尝试搜索value2的最大值?喜欢这个

USE [Database]
SELECT [ID],
   MAX([Value1]) as Value1,
   MAX([Value2]) as Value2
FROM [dbo].[Datatable]
GROUP BY [ID]

答案 1 :(得分:1)

ROW_NUMBER()窗口函数可用于按ID对表进行分区,并对数据进行排名(在这种情况下,按Value1降序排列)。

DECLARE @DataTable TABLE (ID INT, Value1 INT, Value2 INT);
INSERT @DataTable (ID, Value1, Value2)
VALUES (1, 8, 4)
     , (1, 4, 2)
     , (1, 9, 3)
     , (1, 3, 1)
     , (2, 4, 9)
     , (2, 5, 7)
     , (2, 6, 4)
     , (2, 7, 5)
     , (2, 1, 1);

SELECT ID, Value1, Value2
FROM (
    SELECT ID, Value1, Value2, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Value1 DESC) RN
    FROM @DataTable) T
WHERE RN = 1;

或者,如果Value1的最大值存在可能的匹配项,请使用RANK()(或DENSE_RANK()