首页 > 解决方案 > 如何使用 sql select 通过一组记录中的一列获取最大值的结果?

问题描述

我在表格中有这些数据。

date       | name        | code
2020-01-01 | category1   | 0
2020-01-02 | category1   | 1
2020-01-03 | category1   | 2
2020-01-04 | category1   | 3
2020-01-05 | category1   | 0
2020-01-06 | category1   | 1
2020-01-07 | category1   | 2
2020-01-08 | category1   | 0
2020-01-01 | category2   | 0
2020-01-02 | category2   | 0
2020-01-03 | category2   | 1
2020-01-04 | category2   | 0
2020-01-05 | category2   | 1
2020-01-06 | category2   | 2
2020-01-07 | category2   | 0
2020-01-08 | category2   | 1
......

集合中的列代码增加 1。

需要获取一组记录中一列具有最大值的记录。我的示例的结果必须是:

date       | name        | code
2020-01-04 | category1   | 3
2020-01-07 | category1   | 2
2020-01-03 | category2   | 1
2020-01-06 | category2   | 2
2020-01-08 | category2   | 1
......

标签: mysqlsql

解决方案


这是你想要的吗?

select date, name, code
from (
    select 
        t.*,
        lead(code) over(partition by name order by date) lead_code
    from mytable t
) t 
where not code <= lead_code

对于您的示例数据,这会产生

日期 | 姓名 | 代码
:--------- | :-------- | ---:
2020-01-04 | 类别1 | 3
2020-01-07 | 类别1 | 2
2020-01-03 | 类别2 | 1
2020-01-06 | 类别2 | 2

推荐阅读