繁体   English   中英

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

[英]Get max value per day with the corresponding name

我有下表:

姓名
2021 年 12 月 1 日 1
2021 年 11 月 1 日 12
2021 年 12 月 1 日 0
2021 年 12 月 1 日 1
2021 年 11 月 1 日 19
2021 年 11 月 1 日 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 希望我也按名称分组,这再次导致上表(以不同的行顺序)。

在 上使用distinct on

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

您还可以使用 WINDOW function,以避免 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

你试试下面的 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
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM