2017-07-21 49 views
-2

我想從此表中找到特定值;每個ElEnd這是最後的值有ItemNumber 2從3個排組中找出最後一個值

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

我試過了一些使用子查詢或UNION的查詢,但沒有一個是高效的 - 它們都運行得非常慢,我不得不阻止它們(我的表有大約600,000個條目)。

這是一個查詢這給了我錯誤的值(Elend的用於ItemNum 3而不是2):

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

這是一個例子查詢,因爲它運行WAY太慢,沒有工作(我必須中止):

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

我該如何最有效地做到這一點?

+0

因此,所有其他列無關的特定問題? – Strawberry

+0

1)請定義'最後一個值'。我有一個猜測,但是一個問題不應該留下猜測的餘地。 2)請包括你的嘗試。 Atm你的問題看起來更像是「弄清楚我的問題是什麼,併爲我提供複製粘貼解決方案」類型的問題。 – Shadow

+0

正如我在我的問題中所說,我試圖找到每個具有ItemNum 2的ElEnd的最後一次出現,所以在這個示例數據的情況下,將返回的值將是「23.321」,並且'24.123'。 – rayne

回答

0

我現在已經找到了使用該查詢(非常簡單的)解決方案:

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