WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY NATIONAL_ID
ORDER BY SALYEAR DESC, SALMONTH DESC) rn
FROM yourTable t
)
SELECT *
FROM cte
WHERE rn = 1;
with temp as (
select national_id,
max(to_number(to_char(salyear)||lpad(to_char(salmonth),2,'0'))) as max_salmonthyear
from salary
group by national_id)
select *
from salary s, temp t
where s.national_id = t.national_id
and to_number(to_char(salyear)||lpad(to_char(salmonth),2,'0')) = t.max_salmonthyear
order by 1;
5条答案
按热度按时间vddsk6oq1#
使用
ROW_NUMBER
,我们可以尝试:上述方法将针对每一项的最新记录
NATIONAL_ID
,其中“latest”被定义为具有最近一年中的最近月份。mdfafbf12#
我应该这么做。如果您想要一个日期数据类型,tou日期实际上只是为了完整性。
kqhtkvqz3#
你需要使用
COALESCE
这样地:xpszyzbs4#
使用相关子查询-
ie3xauqp5#
为什么不直接使用聚合呢?
如果要将yearmonth转换为日期:
返回工资月份的第一个日期。