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
)
我有这个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
)