2012-04-30 55 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