Sql 按两个字段分组的最大值

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

我的问题是从选项卡中选择最大值,并按两个字段分组。该表非常大,比如说有50亿条记录,数据的排列方式如下:

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的最高事件编号对应的值。这些事情并不完全相同。关于性能,这将取决于许多因素,包括您的索引和最新的统计数据。