我需要這樣做,但我不知道。我有這張桌子。檢索月薪最高的行
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.
我需要這樣做,但我不知道。我有這張桌子。檢索月薪最高的行
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.
我認爲喲可以通過
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);
這可以使用窗口功能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')
SQL Developer說這裏有一個錯誤:extract( year_month from date_column)我認爲does not exist year_month – LeonardBet
你說這麼做嗎? (選擇*,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
SSN是用戶,FECHA是日期 – LeonardBet
普羅蒂普:[標準化](https://en.wikipedia.org/wiki/Database_normalization) – lad2025
什麼是你的「工資」柱?這看起來不像貨幣價值... – aquinas
@ lad2025我相信逗號是在這種情況下的小數點分隔符,不用於表示值的列表。 –