获取最大值而不按 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 两次。
我需要帮助才能从 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 两次。