mySQL 如何 SELECT MAX(date) 从没有组的重复值

mySQL How to SELECT MAX(date) from duplicate values without group

我有这个table:

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 以查找重复项。
当我找到一个副本时,我不仅要 select 具有最新日期的那个。

结果应该是:

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

但这不会给我最新的副本。

您可以使用子查询进行过滤:

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 中,您可以使用 window 函数:

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

您可以按如下方式使用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
)