sql - 如何根据一列的最大值在表中选择不同的数据?

标签 sql postgresql

我有下表:

A        B         C        D         E        F 
James    Michael   123      Hello     World    1
James    Michael   123      Hello     World    5
James    Michael   123      Hello     World    7
Harold   Reynolds  345      There     Poop     1
John     Lowland   555      Woh       Pop      1
Howard   Yow       255      Man       That     1

我希望能够根据 F 的最大值选择所有行。

结果应该是:

James    Michael   123      Hello     World 
Harold   Reynolds  345      There     Poop     
John     Lowland   555      Woh       Pop      
Howard   Yow       255      Man       That     

最佳答案

您可以使用 ROW_NUMBER() 函数执行此操作:

;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY "C" ORDER BY "F" DESC) AS RN
              FROM Table1)
SELECT "A", "B", "C", "D", "E"
FROM cte
WHERE RN = 1

演示:SQL Fiddle

ROW_NUMBER() 函数为 PARTITION BY 子句(可选)中使用的每组字段从 1 开始为每一行生成一个数字,并确定顺序通过 ORDER BY 子句(必需)。

注意:我假设您的 C 字段足以识别一行,但如果情况并非如此,您可能需要将字段添加到 PARTITION BY 子句.

关于sql - 如何根据一列的最大值在表中选择不同的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26187965/

相关文章:

sql - 在插入查询仍在运行时运行 pg_dump?

java - 创建名称为 'empresasDAO' 的 bean 时出错 : Injection of autowired dependencies failed

sql - OLE DB 提供程序 "Search.CollatorDSO"返回 "Command was not prepared"

PostgreSQL - CSV 文件导入错误

postgresql - 如何在 Kibana 中可视化来自 Postgresql 的数据?

django - 通过 django-denorm 中的另一个模型对关系进行非规范化

python - Django 迁移和 Heroku : ProgrammingError at/column does not exist

php - cakePHP 使用 find() 方法进行查询

sql - 分析和识别烛台的最有效方法是什么?

mysql - 使用变量作为名称删除外键