Sql 按两个字段分组的最大值
我的问题是从选项卡中选择最大值,并按两个字段分组。该表非常大,比如说有50亿条记录,数据的排列方式如下:Sql 按两个字段分组的最大值,sql,sql-server,Sql,Sql Server,我的问题是从选项卡中选择最大值,并按两个字段分组。该表非常大,比如说有50亿条记录,数据的排列方式如下: LocationNumber | Event | Value 1 | 1 | 10 1 | 2 | 20 1 | 3 | 30 2 | 1 | 20 2 | 2 | 50 SELECT Loc
LocationNumber | Event | Value
1 | 1 | 10
1 | 2 | 20
1 | 3 | 30
2 | 1 | 20
2 | 2 | 50
SELECT LocationNumber, MAX(Event), Max(value)
FROM tablename
GROUP BY LocationNumber
我想把输出作为
LocationNumber | Event | Value
1 | 3 | 30
2 | 2 | 50
对此有什么想法吗?只需按位置编号分组,然后像这样使用MAX:
LocationNumber | Event | Value
1 | 1 | 10
1 | 2 | 20
1 | 3 | 30
2 | 1 | 20
2 | 2 | 50
SELECT LocationNumber, MAX(Event), Max(value)
FROM tablename
GROUP BY LocationNumber
只需按LocationNumber分组,并按如下方式使用MAX:
LocationNumber | Event | Value
1 | 1 | 10
1 | 2 | 20
1 | 3 | 30
2 | 1 | 20
2 | 2 | 50
SELECT LocationNumber, MAX(Event), Max(value)
FROM tablename
GROUP BY LocationNumber
请尝试:
select
LocationNumber,
Event,
Value
from(
select
LocationNumber,
Event,
Value,
ROW_NUMBER() over (Partition by LocationNumber order by Event desc, Value desc) RNum
From YourTable
)x where RNum=1
请尝试:
select
LocationNumber,
Event,
Value
from(
select
LocationNumber,
Event,
Value,
ROW_NUMBER() over (Partition by LocationNumber order by Event desc, Value desc) RNum
From YourTable
)x where RNum=1
试一试
试一试
从tbl中选择LocationNumber、MAXevent、MAXVal 按位置编号分组
这将起作用,但我担心50亿记录。它能有效执行吗?从tbl中选择LocationNumber、MAXevent、MAXVal 按位置编号分组
这将起作用,但我担心50亿记录。它能有效地执行吗?您确定要按两个字段分组吗?你的输出没有显示这一点!为了达到预期的结果,无论记录的数量如何,您几乎没有选择——但是,您应该确定您选择了实际需要的方法。是否要maxevent和maxvalue-或者-是否要与每个locationNumber的最高事件编号对应的值。这些事情并不完全相同。关于性能,这将取决于许多因素,包括索引和统计信息。是否确实要按两个字段分组?你的输出没有显示这一点!为了达到预期的结果,无论记录的数量如何,您几乎没有选择——但是,您应该确定您选择了实际需要的方法。是否要maxevent和maxvalue-或者-是否要与每个locationNumber的最高事件编号对应的值。这些事情并不完全相同。关于性能,这将取决于许多因素,包括您的索引和最新的统计数据。