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

Pull additional data besides grouped data

我在 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]

您是否尝试搜索 value2 的最大值?像这样

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

ROW_NUMBER() window 函数可用于按 ID 对 table 进行分区并对其中的数据进行排序(在本例中按 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()