获取最大值而不按 1 行 sql 查询分组

get Max value without group by 1 row sql query

我需要帮助才能从 table 中获取一个值,而无需对一个字段进行分组。

table设计是这样的

Progress    DocNum    Project
---------------------------
30        10         1111
70        11         1111
30        10         1112
100       12         1111
70        13         1112

那我想要这样的数据。 获取每个项目的最大进度,不分组 DocNum

Progress    DocNum    Project
---------------------------
100       12         1111
70        13         1112

有人如何帮助我。 之前非常感谢你

你可以用这个

SELECT t.progress, t.docnum, t.project
FROM table_name t
INNER JOIN (
    SELECT MAX(progress) max_progress,
        project
    FROM table_name
    GROUP BY project
) mt
ON t.project = mt.project
    AND t.progress = mt.progress;

或者这个

SELECT progress, docnum, project
FROM table_name 
WHERE (progress, project) IN (
        SELECT MAX(progress) max_progress,
            project
        FROM table_name
        GROUP BY project
    );

您可以使用 window 函数 row_number 获取每个项目最大进度的一行:

Select *
From (
  Select t.*,
    Row_number() over (partition by project order by progress desc) rn
  From your_table t
) t where rn = 1

如果每个项目有多个最大进度行并且您想检索所有这些行,请改用排名:

Select *
From (
  Select t.*,
    Rank() over (partition by project order by progress desc) rnk
  From your_table t
) t where rnk = 1

注:

以上两个查询都只读取了一次table。接受的解决方案读取 table 两次。