Sql 如何根据具有最大值的列筛选行?
我有一张如下的桌子Sql 如何根据具有最大值的列筛选行?,sql,greatest-n-per-group,Sql,Greatest N Per Group,我有一张如下的桌子 --------Table 1---------- ID VERSION STATUS 001 1 1 001 1 2 002 1 3 002 2 4 002 2 3 所以这里我需要根据版本和状态的最大值过滤ID。预期结果如下 --------Table 1---------- ID V
--------Table 1----------
ID VERSION STATUS
001 1 1
001 1 2
002 1 3
002 2 4
002 2 3
所以这里我需要根据版本和状态的最大值过滤ID。预期结果如下
--------Table 1----------
ID VERSION STATUS
001 1 2
002 2 4
我试着使用代码
select *
from "table1"
where "VERSION" = (select max("VERSION") from "table1")
and "STATUS" = (select max("STATUS") from "table1")
但它不起作用。请帮助大多数dbms支持row_number(),您可以像下面这样尝试
select * from
(select *,row_number() over(partition by id order by status desc) rn
from table_name
) a where a.rn=1
您可以使用
行编号()
:
除非我遗漏了一些明显的东西,否则使用
max
的简单分组应该可以做到:
SELECT ID, MAX(VERSION) As Version, MAX(STATUS) As Status
FROM table1
GROUP BY ID
试试这个:
select id,version,status from (
select *,ROW_NUMBER() over (partition by id order by status desc) rn from YOURTABLE
) t
where rn=1
用您正在使用的数据库标记您的问题。您是否在每一行上都有一个唯一的id?如果id、版本组中的status MAX()值相同,则在“ties”的情况下会发生什么?您需要两条记录还是只需要一条记录..SQL标签是关于编写ANSI/ISO SQL标准代码而不是关于SQL Server(MSSQL)Topicstarter您最想添加的是
按ID排序
,因为MySQL 8不按annymore对组进行排序..事实上,我还想知道窗口函数的答案,Topicstarter由于MySQL 8不按annymore对组进行排序,所以您最希望添加一个orderbyid
。。
select id,max(version),max(status) from
table1
group by id
select id,version,status from (
select *,ROW_NUMBER() over (partition by id order by status desc) rn from YOURTABLE
) t
where rn=1