我在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]
答案 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()
)