Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据具有最大值的列筛选行?_Sql_Greatest N Per Group - Fatal编程技术网

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