2016-04-04 22 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