首页 > 解决方案 > 按多列分组,但只返回一行。仅聚合一列

问题描述

如果我有这张桌子

Contract : Code : Date
62          11    01/01/2016
62          16    01/02/2016
62          09    01/03/2016

我只想返回这一行,

Contract : Code : Date
62          09    01/03/2016

我想做一个选择合同,最大(数据),按合同的代码组

但我不能,因为代码列应该以某种形式聚合。

我已经尝试了每个聚合函数,但在更大的数据集中它们都不起作用。比如,最大值,最小值,总和,计数等。我只需要该合同和日期的代码。

你们能帮帮我吗?非常感谢

标签: sqlpostgresqlgreatest-n-per-group

解决方案


Postgres 有一个非常方便的扩展名为distinct on,它非常有效地做到了这一点:

select distinct on (contract) t.*
from t
order by contract, date desc;

distinct on为括号中键的每个值返回一行。该行是遇到的第一行 - 基于order by- 对于每组值。


推荐阅读