sql - 一步选择变量最大的行

标签 sql sql-server

我有一个看起来像这样的表格:

--------EXAMPLE---------------------------------------------------------
Cat1           Cat2          Value
a              NULL          131
b              e1            143
a              e2            135
c              NULL          136
a              e1            132
a              NULL          13
c              e4            1

我想从上面选择 Cat1 中各种类型具有最高值的行。所以,我的答案如下:

--------EXAMPLE---------------------------------------------------------
Cat1           Cat2          Value
b              e1            143
a              e2            135
c              NULL          136

我正在使用 Microsoft SQL,并且正在寻找高效的工具,因为我的表中有大约 4000 万行需要操作。

谢谢!!

最佳答案

您可以将 CTEDENSE_RANK 结合使用:

WITH cte 
     AS (SELECT cat1, 
                cat2, 
                Value, 
                Rank = Dense_rank() 
                         OVER ( 
                           partition BY cat1 
                           ORDER BY Value DESC) 
         FROM   dbo.tablename) 
SELECT cat1, 
       cat2, 
       value 
FROM   cte 
WHERE  rank = 1 

如果您只想要单个(任意)记录且存在多个具有相同最高值的记录,请使用 Row_Number 而不是 Dense_Rank

关于sql - 一步选择变量最大的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448028/

相关文章:

SQL:在查询的其他部分引用计算列

sql - 从 SQL 表中删除重复的行

sql - PostgreSQL select max with group by 和附加值

sql - 使用分隔符连接或合并许多列值并忽略空值 - SQL Server 2016 或更早版本

sql-server - sql statement.exec错误:mssql:'?'附近的语法不正确

sql - 计算每个类别中的记录

sql-server - xp_instance_RegRead和xp_RegRead之间的区别

sql-server - 如何使用 Entity Framework 6 Code First 迁移创建初始数据行并将其添加到新表

jquery - SQL Server 与 jQuery 和 Node js 的连接

sql - 如何基于字段的子字符串值联接两个表?