通过1行sql查询得到没有组的最大值

时间:2017-02-26 01:33:54

标签: sql sql-server group-by max greatest-n-per-group

我需要帮助从表中获取值而不对一个字段进行分组。

表设计就像这样

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

有人可以帮助我。 非常感谢

2 个答案:

答案 0 :(得分:2)

您可以使用窗口函数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

注意:

上述两个查询只读取一次表。接受的解决方案读取表格两次。

答案 1 :(得分:0)

你可以用这个

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
    );