从3个行组中的一个中查找最后一个值

时间:2017-07-21 11:29:40

标签: mysql

我想从这张表中找到一个特定的值;具有ItemNumber ElEnd的每个2的最后一个值:

ID  | ID2  | Item1 | Item2  | Item3 | Element | ItemNum | ElStart   | ElEnd
===================================================================
1   | 1    | rock   | n      | roll  | r       | 1       | 23.212   | 23.222
2   | 1    |  rock  | n      | roll  | o       | 1       | 23.222   | 23.256
3   | 1    |  rock  | n      | roll  | c       | 1       | 23.256   | 23.277
4   | 1    |  rock  | n      | roll  | k       | 1       | 23.277   | 23.290
5   | 1    |  rock  | n      | roll  | n       | 2       | 23.290   | 23.321
6   | 1    |  rock  | n      | roll  | r       | 3       | 23.321   | 23.331
7   | 1    |  rock  | n      | roll  | o       | 3       | 23.331   | 23.434
8   | 1    |  rock  | n      | roll  | l       | 3       | 23.434   | 23.456
9   | 1    |  rock  | n      | roll  | l       | 3       | 23.456   | 23.567
10  | 2    |  a     | tiny   | rock  | a       | 1       | 23.567   | 23.678
11  | 2    |  a     | tiny   | rock  | t       | 2       | 23.678   | 23.789
12  | 2    |  a     | tiny   | rock  | i       | 2       | 23.789   | 23.890
13  | 2    |  a     | tiny   | rock  | n       | 2       | 23.890   | 23.901
14  | 2    |  a     | tiny   | rock  | y       | 2       | 23.901   | 24.123
15  | 2    |  a     | tiny   | rock  | r       | 3       | 24.123   | 24.234
16  | 2    |  a     | tiny   | rock  | o       | 3       | 24.234   | 24.345
17  | 2    |  a     | tiny   | rock  | c       | 3       | 24.345   | 24.456
18  | 2    |  a     | tiny   | rock  | k       | 3       | 24.456   | 24.567

因此,对于此示例表,我想选择23.32124.123。我后来想在UPDATE中使用这些值将它们复制到新列Item2ElementEnd

我尝试了一些使用subselect或UNION的查询,但没有一个是高效的 - 它们都运行得太慢以至于我不得不停止它们(我的表有大约600.000个条目) 。

这是一个给出错误值的查询(ItemNum 3的ElEnd而不是2):

select ID2, Item2, max(ElEnd)
from t1
group by ID2;

这是一个不起作用的示例查询,因为它运行速度太慢(我不得不中止):

select Item2, ElStart, ElEnd
from t1
where ItemNum = "2"
and ElStart = (select max(ElStart) from t1 as f where f.Item2 = t1.Item2);

如何最有效地完成这项工作?

1 个答案:

答案 0 :(得分:0)

我现在使用此查询找到了一个(非常简单的)解决方案:

select ID, ID2, item2, max(ElEnd), ItemNum
from t1
WHERE ItemNum = 2
group by ID2, ItemNum;