如何只保留一个数据字段值最高的行,删除其他行

k5ifujac  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(423)

这个问题在这里已经有答案了

如何在mysql中选择最大值(column value)的行,并用另一列进行分区(20个答案)
10个月前关门了。
我有一张如下的table:

id | description | expiration date
------------------------
1  | ............| 2016-02-09 00:00:00  
------------------------
1  | ............| 2099-09-09 00:00:00  
------------------------
1  | ............|  
------------------------
2  | ............| 2016-02-09 00:00:00  
------------------------
2  | ............| 2099-09-09 00:00:00  
------------------------
3  | ............| 2099-09-09 00:00:00

如果一个id出现多次,则会保留一个没有过期日期的id,如id1。但在id2中,两个记录都有过期日期,编号较大的记录将被保留。因此,每个id只有一行,结果将是:

id | description | expiration date
------------------------
1  | ............|  
------------------------
2  | ............| 2099-09-09 00:00:00  
------------------------
3  | ............| 2099-09-09 00:00:00

它很容易用编程语言实现,但我不能编写一个优雅的sql命令。谢谢。

vh0rcniy

vh0rcniy1#

你可以用 row_number() ```
select * from
(
select id, description,expiration_date,
row_number() over(partition by id order by case when expiration_date is null then 1 else 2 end asc, expiration_date desc) as rn
from tablename
)A where rn=1

相关问题