检索每月薪水最高的行

时间:2016-04-04 19:47:47

标签: sql oracle oracle11g

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

USER | SALARY  |   DATE
1234   1881,33     01/01/08
8762   2578        01/01/08
8726   2183,6475   01/01/08
2321   1745,8525   01/01/08
3123   1639,2      01/01/08
1934   2572        01/01/08

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

2 个答案:

答案 0 :(得分:2)

我认为你可以使用in子句进行subselect with group by

select user from my_table 
where (salary, to_char(date,'mm-yyyy')) in 
   select(max(salary), to_char(date,'mm-yyyy') month_year 
        from my_table group by month_year);

答案 1 :(得分:1)

这可以使用窗口函数ROW_NUMBER来实现。

它用于枚举不同组中的行(在您的情况下为月份 - 下面的说明)按工资按降序排列(在您的情况下,最高薪水将被分配rownum = 1):

SELECT 
 to_char(date_column, 'YYYY-MM'), 
 user
FROM (
 SELECT
 *,
 row_number() OVER (PARTITION BY to_char(date_column, 'YYYY-MM') ORDER BY salary DESC) AS rownum
FROM yourtable
 ) foo
WHERE rownum = 1
ORDER BY 1 -- not needed, looks nice in the results

使用TO_CHAR功能仅从您的日期获取年份和月份部分并获取组:

TO_CHAR(date_column, 'YYYY-MM')