选择最大记录

时间:2016-01-26 08:59:05

标签: oracle

这是我的表EMP_EARN_DETAILS

Emp_Ern_No是主键。

我需要为每个emp_no获取每个earn_no的金额,其中emp_earn_no最大值

enter image description here

输出应如下所示。

0004321    ERN001           2345          11
0004321    ERN002            345          10
0004321    ERN003            345           9
000507     ER-01             563           4 
000732     ERN001            2345          12
000732     ERN002               9          13
000732     ERN003             678           8

请帮我查询

4 个答案:

答案 0 :(得分:1)

您可以按所需字段进行汇总,同时按EMP_EARN_NO值排序;这可以通过分析函数来解决:

    WITH TEST(emp_no, earn_no, amount, emp_earn_no) AS
   (
    SELECT '0004321' , 'ERN001'   ,2345 ,11   FROM DUAL UNION ALL
    SELECT '0004321' , 'ERN002'   ,345  , 10  FROM DUAL UNION ALL
    SELECT '0004321' , 'ERN003'   ,345  ,9    FROM DUAL UNION ALL
    SELECT '000507'  , 'ER-01'    ,56   ,1    FROM DUAL UNION ALL
    SELECT '000507'  , 'ER-01'    ,563  , 2   FROM DUAL UNION ALL    
    SELECT '000507'  , 'ER-01'    ,563  ,3    FROM DUAL UNION ALL
    SELECT '000507'  , 'ER-01'    ,563  ,4    FROM DUAL UNION ALL
    SELECT '00732'   , 'ERN001'   ,123  ,7    FROM DUAL UNION ALL
    SELECT '00732'   , 'ERN001'   ,2345 ,12   FROM DUAL UNION ALL
    SELECT '00732'   , 'ERN002'   ,9    ,13   FROM DUAL UNION ALL
    SELECT '00732'   , 'ERN003'   ,67   ,5    FROM DUAL UNION ALL
    SELECT '00732'   , 'ERN003'   ,456  ,6    FROM DUAL UNION ALL
    SELECT '00732'   , 'ERN003'   ,678  ,8    FROM DUAL
    )
SELECT emp_no, earn_no, amount, emp_earn_no
FROM (
        SELECT emp_no,
        earn_no,
        amount,
        emp_earn_no, ROW_NUMBER()  OVER ( PARTITION BY EMP_NO, EARN_NO ORDER BY emp_earn_no DESC) AS ROW_NUM
        FROM TEST
     )
WHERE ROW_NUM = 1

答案 1 :(得分:0)

试一试,

SELECT EMP_NO, SUM(AMOUNT)
FROM EMP_EARN_DETAILS
GROUP BY EMP_NO
HAVING EMP_EARN_NO = MAX(EMP_EARN_NO)

答案 2 :(得分:0)

尝试此查询:

select emp_no, earn_no,
       sum(amount) keep (dense_rank last order by emp_earn_no) as sum_amount
from emp_earn_details
group by emp_no, earn_no

答案 3 :(得分:0)

首先通过以下查询,您的条件实现了:

count==2

只有您必须在具有不同select t.emp_no a ,t.earn_no b ,max(t.amount) c from EMP_EARN_DETAILS t group by t.emp_no,t.earn_no order by t.emp_no 的同一记录中指定的内容。您必须在同一记录中指定必须在结果中。 因此,如果您希望结果中包含最大EMP_EARN_NO,则可以使用以下查询作为最终查询(确切地说是您的目标):

EMP_EARN_NO

如果您希望结果中包含最小值或其他select t.emp_no a ,t.earn_no b ,max(t.amount) c, max(t.emp_earn_no) emp_earn_no from EMP_EARN_DETAILS t group by t.emp_no,t.earn_no order by t.emp_no ,则可以根据您的条件在上面查询替换最大值函数。