首页 > 解决方案 > 选择具有相应时间的 MAX(列值)的行,按名称区分

问题描述

我想选择最大值及其相应的发生时间和小时,DISTINCT 的名称

我的时间是 str 数据类型。我们是否在这里使用自内连接来这样做?

我的桌子是:

name    high             time                
-------|-----|---------------------------
name 1 | 12  | 2020-05-25 12:01:00-04:00 
name 1 | 14  | 2020-05-25 12:02:00-04:00
name 1 | 16  | 2020-05-25 12:03:00-04:00
name 2 | 12  | 2020-05-25 12:01:00-04:00 
name 2 | 11  | 2020-05-25 12:02:00-04:00
name 2 | 10  | 2020-05-25 12:03:00-04:00
name 3 | 21  | 2020-05-25 12:01:00-04:00 
name 3 | 23  | 2020-05-25 12:02:00-04:00 
name 3 | 22  | 2020-05-25 12:03:00-04:00 

我想要的结果是

  name   hour            datetime           max_high
--------|-----|---------------------------|--------
 name 1 | 12  | 2020-05-25 12:03:00-04:00 | 16   
 name 2 | 12  | 2020-05-25 12:01:00-04:00 | 12
 name 3 | 12  | 2020-05-25 12:02:00-04:00 | 23

非常感谢!

标签: mysqlsql

解决方案


ROW_NUMBER将是去这里的一种方式:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTTITON BY name ORDER BY high DESC) rn
    FROM yourTable
)

SELECT
    name,
    HOUR(CAST(datetime AS timestamp)) AS hour,
    datetime,
    high AS max_high
FROM cte
WHERE rn = 1
ORDER BY name;

推荐阅读