【问题标题】:Query to extract highest value for each ID submitted查询以提取每个提交的 ID 的最高值
【发布时间】:2012-05-10 08:21:38
【问题描述】:

我在执行某个查询时遇到了问题,而不是我打算让它执行的操作。 我在数据库中拥有的每个员工 ID (pmt_id) 的雇主 ID (eh_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
126 ¦ 3725

我期待的是:

eh_id ¦ eh_pmt_id

124 ¦ 131
126 ¦ 3725

我将不胜感激,因为我自己对此一无所知

干杯

【问题讨论】:

  • 我认为我们需要从您的表格中查看一些示例数据,以了解您要完成的工作..

标签: sql oracle


【解决方案1】:

您可以为此使用分析函数:

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

【讨论】:

  • 如果您要使用分析函数,那么使用 MAX 而不是 Row_Number 会更节省内存,因为对于每个值,如果 peh_pmt_id 系统只需要存储和比较单个最大值eh_id 的值,而不是维护所有值的排名列表。
  • @Lamak 第二次阅读此答案后,我应用了它,它对我想要实现的目标非常有效。谢谢,我将我接受的答案更改为这个,因为它是最能回答我问题的答案
【解决方案2】:
SELECT peh_pmt_id, MAX(eh_id)
FROM employer_history
WHERE eh_pmt_id in (131,3725)
GROUP BY peh_pmt_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2010-10-19
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多