【问题标题】:Retrieve rows with highest salary per month and year检索每月和每年薪水最高的行
【发布时间】:2016-04-05 11:12:38
【问题描述】:

我需要这样做,但我不知道。我有这张桌子。

SSN | SALARY  |   MONTH YEAR
1234   1881,33     01     2008
8762   2578        01     2008
8726   2183,6475   01     2008
2321   1745,8525   01     2008
3123   1639,2      01     2008
1934   2572        01     2008

是否可以从所有年份的月份中选择薪水较高的人?在这种情况下,2008 年 1 月是 8762。

【问题讨论】:

    标签: sql oracle oracle11g oracle-sqldeveloper


    【解决方案1】:
    SELECT *
    FROM   (
      SELECT t.*,
             ROW_NUMBER() OVER ( PARTITION BY year_month
                                 ORDER BY money DESC ) AS rn
      FROM   (
        SELECT A.ssn,
               SUM(B.WAGE)- SUM(B.SALARY/(8*20)) AS money,
               TRUNC( rep_date, 'MM' ) AS year_month
        FROM   REP_LINES A 
               INNER JOIN COSTS B
               ON (    A.JOB=B.CAT_NUM
                   and B.YEAR = EXTRACT( YEAR FROM A.REP_DATE ) )
        GROUP BY A.ssn,
               TRUNC( rep_date, 'MM' )
      ) t
    )
    WHERE  rn = 1;
    

    【讨论】:

    • 什么是t.?我不能用它
    【解决方案2】:

    你可以使用keep:

    select year, month, max(salary) as salary,
           max(ssn) over (dense_rank first order by salary desc) as max_ssn
    from (select to_char(l.rep_date, 'YYYY') as year, to_char(l.rep_date, 'MM') as month,
                 l.SSN, (SUM(c.WAGE)- SUM(c.SALARY/(8*20))) as salary 
          from rep_lines l join
               costs c
               on l.job = c.cat_num and
                  to_char(c.year) = to_char(l.rep_date, 'YYYY')
         )
    group by year, month
    order by year, month;
    

    【讨论】:

      【解决方案3】:

      你可以试试:

      SELECT 
        MONTH
        , YEAR
        , FIRST_VALUE(SALARY) OVER (PARTITION BY MONTH,YEAR ORDER BY SALARY DESC)
        , FIRST_VALUE(SSN) OVER (PARTITION BY MONTH,YEAR ORDER BY SALARY DESC)
      FROM your_table;
      

      【讨论】:

        猜你喜欢
        • 2016-07-24
        • 2018-08-24
        • 2022-01-07
        • 2013-11-14
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        相关资源
        最近更新 更多