Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询:获取某列值最大的行_Sql_Sql Server_Greatest N Per Group - Fatal编程技术网

SQL查询:获取某列值最大的行

SQL查询:获取某列值最大的行,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,下面是我正在处理的数据示例: Ei第一列是主键 E0 S0 DT0 V1 E1 S1 DT1 V1 E2 S1 DT2 V1 E3 S1 DT3 V3 我正在尝试筛选此项以获得: E0 S0 DT0 V1 E3 S1 DT3 V3 基本上,获取行,如果它们具有相同的Si,则选择具有最高/最大Vi的行。Vi的形式为w.xy.z,其中w、x、y、z是整数 我不知道该怎么做。有什么建议吗 select ei, si, dti, vi from ( select ei, si,

下面是我正在处理的数据示例:

Ei第一列是主键

 E0 S0 DT0 V1
 E1 S1 DT1 V1
 E2 S1 DT2 V1
 E3 S1 DT3 V3
我正在尝试筛选此项以获得:

 E0 S0 DT0 V1
 E3 S1 DT3 V3
基本上,获取行,如果它们具有相同的Si,则选择具有最高/最大Vi的行。Vi的形式为w.xy.z,其中w、x、y、z是整数

我不知道该怎么做。有什么建议吗

select ei, si, dti, vi from (
    select ei, si, dti, vi,
           row_number() over(partition by si order by vi desc) rw
    from your_tab
) as t where rw = 1;
在这种情况下,可以使用分析函数ROW\ U NUMBER

分析函数类似于聚合函数,因为它们应用于一组行。但每行返回一个值

PARTITION BY定义组,ORDER BY定义组内的顺序

ROW_NUMBER根据顺序为组中的每一行分配一个连续的行号。对于si的每个不同值,第一行号为1

如果您需要使用关系检索结果,可以使用秩/密秩函数。它们为权重相等的行分配相同的行号

比如说

E0 S0 DT0 V1
E1 S1 DT1 V1
E2 S1 DT2 V1
E3 S1 DT3 V3
E4 S1 DT4 V3
等级/密集等级将返回

E0 S0 DT0 V1
E3 S1 DT3 V3
E4 S1 DT4 V3
行号

E0 S0 DT0 V1
E3 S1 DT3 V3 (or E4 S1 DT4 V3)
在这种情况下,可以使用分析函数ROW\ U NUMBER

分析函数类似于聚合函数,因为它们应用于一组行。但每行返回一个值

PARTITION BY定义组,ORDER BY定义组内的顺序

ROW_NUMBER根据顺序为组中的每一行分配一个连续的行号。对于si的每个不同值,第一行号为1

如果您需要使用关系检索结果,可以使用秩/密秩函数。它们为权重相等的行分配相同的行号

比如说

E0 S0 DT0 V1
E1 S1 DT1 V1
E2 S1 DT2 V1
E3 S1 DT3 V3
E4 S1 DT4 V3
等级/密集等级将返回

E0 S0 DT0 V1
E3 S1 DT3 V3
E4 S1 DT4 V3
行号

E0 S0 DT0 V1
E3 S1 DT3 V3 (or E4 S1 DT4 V3)

我们谈论的是什么样的sql?MySQL?2008R2?2014年?我正在运行Microsoft SQL Server 2014我们在谈论什么样的SQL?MySQL?2008R2?2014年?我正在运行Microsoft SQL Server 2014,如gracias,señor。只是一个小小的更正,按原样编写的查询会抛出一个语法错误。”从中选择ei、si、dti、vi,从您的_选项卡中选择ei、si、dti、vi,行数按si顺序超额分配,按vi描述rw作为T,其中rw=1;'修复它。@NGambit谢谢,我已经更新了答案。有些数据库要求每个内联视图都有一个别名。Muchas gracias、señor。只要稍加修改,按原样编写的查询就会抛出语法错误。”从中选择ei、si、dti、vi,从您的_选项卡中选择ei、si、dti、vi,行数按si顺序超额分配,按vi描述rw作为T,其中rw=1;'修复它。@NGambit谢谢,我已经更新了答案。有些数据库要求每个内联视图都有一个别名。