按多列分组,但只返回一行。仅聚合一列

如果我有这张桌子

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

我想做一个选择合约,max(data),代码按合约分组

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

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

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

iCMS 回答:按多列分组,但只返回一行。仅聚合一列

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

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

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

,

有一个非常简单的通用模式可以使用聚合来做到这一点:

找到最大值,然后返回到表中。

我假设表格是 R(合同、代码、日期)。

注意我如何重命名 M 中的属性以匹配 R 中的属性名称。

WITH M as (
    select contract,max(date) as date 
    from R group by contract)
  select * from R natural join M;

窗口函数也会这样做。

如果你只想要最大的,那么:

WITH M as (
    select max(date) as date 
    from R)
  select * from R natural join M;
本文链接:https://www.f2er.com/108489.html

大家都在问