每天获取对应名称的最大值

Posted

技术标签:

【中文标题】每天获取对应名称的最大值【英文标题】:Get max value per day with the corresponding name 【发布时间】:2021-04-17 19:00:09 【问题描述】:

我有下表:

day name val
12-01-2021 Een 1
11-01-2021 Twee 12
12-01-2021 Drie 0
12-01-2021 Twee 1
11-01-2021 Drie 19
11-01-2021 Een 11

现在我想获取每天最大的val,包括对应的val 的名称。我怎样才能得到这个?我得到了以下查询:

select max(val), day 
from table t 
group by day;

但是,我希望结果包含相应的名称。我的第一个想法是在查询中包含name

select name, max(val), day 
from table t 
group by day;

问题是 Postgres 希望我也按名称分组,这再次导致上表(以不同的行顺序)。

【问题讨论】:

【参考方案1】:

使用distinct on:

select distinct on (day) t.*
from t
order by day, val desc;

【讨论】:

【参考方案2】:

您还可以使用 WINDOW 函数来避免 DISTINCT ON 并同时处理其他品牌的数据库。 row_number() 和 ORDER BY 可以解决问题:

WITH i AS (
    SELECT  
        name
        , val
        , day
        , row_number() OVER(PARTITION BY name ORDER BY val DESC, day)
    FROM    table t
)
SELECT  name
    ,   val
    ,   day
FROM    i
WHERE   row_number = 1; -- one result for every name, the first one

【讨论】:

【参考方案3】:

你试试下面的sql。

WITH max_val AS (
    SELECT MAX(val) AS max_val
           ,day 
    FROM TABLE t
    GROUP BY day
)

SELECT  max_val.max_val
        ,t.name
        ,t.day
FROM TABLE t
INNER JOIN max_val
ON t.day = max_val.day
;

【讨论】:

以上是关于每天获取对应名称的最大值的主要内容,如果未能解决你的问题,请参考以下文章

在通达信的相邻两天分时图中,如何编写每天最大成交量所对应的价格的选股公式

如何取group by后最大值所对应的字符字段?

如何获取每年的积分名称和最大值? (SQL) [重复]

Postgres:获取对应于组中其他列的最大值的列的值

在EXCEL如何在同一表格多列名称中查找数据相对应的名称

Labview中 怎么获取 波形数据中 其Y最小值对应的X轴坐标,谢谢,