我需要帮助从表中获取值而不对一个字段进行分组。
表设计就像这样
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
有人可以帮助我。 非常感谢
答案 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
);