2016-04-04 24 views
0

我需要这样做,但我不知道。我有这张桌子。检索月薪最高的行

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.

+0

普罗蒂普:[标准化](https://en.wikipedia.org/wiki/Database_normalization) – lad2025

+0

什么是你的“工资”柱?这看起来不像货币价值... – aquinas

+0

@ lad2025我相信逗号是在这种情况下的小数点分隔符,不用于表示值的列表。 –

回答

2

我认为哟可以通过

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); 
+0

是的,但是是一个sql和oracle sintax – scaisEdge

+0

是的,其中(x,y)也支持在mysql中。 – scaisEdge

+1

在oracle中至少也是如此。 1986年,当我开始使用oracle 4 ... – scaisEdge

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') 
+0

SQL Developer说这里有一个错误:extract( year_month from date_column)我认为does not exist year_month – LeonardBet

+0

你说这么做吗? (选择*,ROW_NUMBER())(SELECT to_char(FECHA,'YYYY-MM')ORDER BY CUENTA DESC)内部联合成本B对A.JOB = B。()()(SUM(B.WAGE) - SUM(B.SALARY /(8 * 20)))CUENTA,trunc(REP_date,'mm')FECHA FROM REP_LINES A CAT_NUM和TO_CHAR(B.YEAR)= TO_CHAR(A.REP_DATE,'YYYY') GROUP BY A.SSN,trunc(REP_date,'mm')ORDER BY FECHA))FOO WHERE ROWNUM = 1 ORDER BY 1;'The表已更改为查询 – LeonardBet

+0

SSN是用户,FECHA是日期 – LeonardBet