mySQL如何从没有组的重复值中选择MAX(日期)[重复]
Posted
技术标签:
【中文标题】mySQL如何从没有组的重复值中选择MAX(日期)[重复]【英文标题】:mySQL How to SELECT MAX(date) from duplicate values without group [duplicate] 【发布时间】:2021-03-22 19:48:44 【问题描述】:我有这张桌子:
id obj_nr el_nr location date
0 1234 1 a3 2020-01-01
1 1234 2 a2 2020-01-02
2 1234 3 a4 2020-01-03
3 1234 1 a9 2020-01-04
不,我想连接 obj_nr 和 element_nr 来查找重复项。 当我找到一个重复时,我不仅要选择日期最近的那个。
结果应该是:
id obj_nr el_nr location date
1 1234 2 a2 2020-01-02
2 1234 3 a4 2020-01-03
3 1234 1 a9 2020-01-04
我的查询应该是什么样子?
这是我尝试过的:
SELECT MAX(id) id, obj_nr, el_nr, location, max(date_scanned)
FROM element_location WHERE obj_nr = :obj_nr
GROUP BY obj_nr, el_nr, location
但这不会给我最新的副本。
【问题讨论】:
【参考方案1】:您可以按如下方式使用NOT EXISTS
:
select *
from element_location e
where not exists (
select 1
from element_location ee
where ee.obj_nr = e.obj_nr and ee.element_nr = e.element_nr
and ee.date > e.date
)
【讨论】:
【参考方案2】:您可以使用子查询进行过滤:
select *
from element_location el
where date = (
select max(el1.date)
from element_location el1
where el1.obj_nr = el.obj_nr and el1.element_nr = el.element_nr
)
这将利用(obj_nr, element_nr, date desc)
上的索引。
或者,在 mysql 8.0 中,您可以使用窗口函数:
select *
from (
select el.*,
rank() over(partition by obj_nr, element_nr order by date desc) rn
from element_location el
) el
where rn = 1
【讨论】:
完美。它有效:)以上是关于mySQL如何从没有组的重复值中选择MAX(日期)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在mysql选择查询中获取两个日期之间的日期列表[重复]