我需要这样做,但我不知道。我有这张桌子。
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 :(得分: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')