2012-04-30 79 views
0

我在執行查詢時遇到了問題,而不是我打算執行的操作。 僱主ID(eh_id)爲我的數據庫中的每個員工ID(pmt_id)。查詢爲提交的每個ID提取最高值

,因爲它代表我的查詢如下:

SELECT * 
    FROM employer_history table1 
    WHERE eh_id = 
    (
     SELECT eh_id 
     FROM employer_history table2 
     WHERE table1.eh_id = table2.eh_id 
     group by table2.eh_id 
    ) 
    and table1.eh_pmt_id in (131,3725) 

什麼我得到的是:

eh_id | eh_pmt_id
123 | 131
124 | 131
125 | 3725
我想要的是:

eh_id | eh_pmt_id

124 | 131
126 | 3725

我希望得到任何幫助在這,因爲我用它越來越行不通自己

乾杯

+0

我認爲我們需要從表格中看到一些示例數據,以瞭解您想要完成什麼。 –

回答

2

你可以使用此功能的分析功能:

SELECT * 
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY peh_pmt_id ORDER BY eh_id DESC) Corr 
     FROM employer_history 
     WHERE eh_pmt_id in (131,3725)) t1 
WHERE Corr = 1 
+0

如果您打算使用分析函數,那麼使用MAX而不是使用MAX的內存效率更高Row_Number,對於每個值(如果peh_pmt_id),系統只需要存儲和比較eh_id的單個最大值,而不是維護所有值的已排序列表。 –

+0

@Lamak第二次閱讀這個答案後,我申請了這個答案,它完美地幫助了我試圖達到的目標。謝謝,我改變了我接受的答案,因爲它是最能回答我的問題的答案 – Stephen

1
SELECT peh_pmt_id, MAX(eh_id) 
FROM employer_history 
WHERE eh_pmt_id in (131,3725) 
GROUP BY peh_pmt_id