除分组数据外还提取其他数据
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()
)
我在 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()
)