检索每月和每年工资最高的行
Retrieve rows with highest salary per month and year
我需要这样做,但我不知道。我有这个 table.
SSN | SALARY | MONTH YEAR
1234 1881,33 01 2008
8762 2578 01 2008
8726 2183,6475 01 2008
2321 1745,8525 01 2008
3123 1639,2 01 2008
1934 2572 01 2008
是否可以select从所有年份的月份中找出薪水较高的人?在这种情况下,2008 年 1 月是 8762。
您可以使用 keep
:
select year, month, max(salary) as salary,
max(ssn) over (dense_rank first order by salary desc) as max_ssn
from (select to_char(l.rep_date, 'YYYY') as year, to_char(l.rep_date, 'MM') as month,
l.SSN, (SUM(c.WAGE)- SUM(c.SALARY/(8*20))) as salary
from rep_lines l join
costs c
on l.job = c.cat_num and
to_char(c.year) = to_char(l.rep_date, 'YYYY')
)
group by year, month
order by year, month;
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY year_month
ORDER BY money DESC ) AS rn
FROM (
SELECT A.ssn,
SUM(B.WAGE)- SUM(B.SALARY/(8*20)) AS money,
TRUNC( rep_date, 'MM' ) AS year_month
FROM REP_LINES A
INNER JOIN COSTS B
ON ( A.JOB=B.CAT_NUM
and B.YEAR = EXTRACT( YEAR FROM A.REP_DATE ) )
GROUP BY A.ssn,
TRUNC( rep_date, 'MM' )
) t
)
WHERE rn = 1;
你可以试试:
SELECT
MONTH
, YEAR
, FIRST_VALUE(SALARY) OVER (PARTITION BY MONTH,YEAR ORDER BY SALARY DESC)
, FIRST_VALUE(SSN) OVER (PARTITION BY MONTH,YEAR ORDER BY SALARY DESC)
FROM your_table;
我需要这样做,但我不知道。我有这个 table.
SSN | SALARY | MONTH YEAR
1234 1881,33 01 2008
8762 2578 01 2008
8726 2183,6475 01 2008
2321 1745,8525 01 2008
3123 1639,2 01 2008
1934 2572 01 2008
是否可以select从所有年份的月份中找出薪水较高的人?在这种情况下,2008 年 1 月是 8762。
您可以使用 keep
:
select year, month, max(salary) as salary,
max(ssn) over (dense_rank first order by salary desc) as max_ssn
from (select to_char(l.rep_date, 'YYYY') as year, to_char(l.rep_date, 'MM') as month,
l.SSN, (SUM(c.WAGE)- SUM(c.SALARY/(8*20))) as salary
from rep_lines l join
costs c
on l.job = c.cat_num and
to_char(c.year) = to_char(l.rep_date, 'YYYY')
)
group by year, month
order by year, month;
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY year_month
ORDER BY money DESC ) AS rn
FROM (
SELECT A.ssn,
SUM(B.WAGE)- SUM(B.SALARY/(8*20)) AS money,
TRUNC( rep_date, 'MM' ) AS year_month
FROM REP_LINES A
INNER JOIN COSTS B
ON ( A.JOB=B.CAT_NUM
and B.YEAR = EXTRACT( YEAR FROM A.REP_DATE ) )
GROUP BY A.ssn,
TRUNC( rep_date, 'MM' )
) t
)
WHERE rn = 1;
你可以试试:
SELECT
MONTH
, YEAR
, FIRST_VALUE(SALARY) OVER (PARTITION BY MONTH,YEAR ORDER BY SALARY DESC)
, FIRST_VALUE(SSN) OVER (PARTITION BY MONTH,YEAR ORDER BY SALARY DESC)
FROM your_table;