我想从这张表中找到一个特定的值;具有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.321
和24.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);
如何最有效地完成这项工作?
答案 0 :(得分:0)
我现在使用此查询找到了一个(非常简单的)解决方案:
select ID, ID2, item2, max(ElEnd), ItemNum
from t1
WHERE ItemNum = 2
group by ID2, ItemNum;