数据有 表user_info 字段
user_name,pay_year,pay_month,pay
===========================================
潮汐猎人 2010 9 1000
潮汐猎人 2010 8 800
潮汐猎人 2010 7 1200
撼地神牛 2010 10 300
撼地神牛 2010 9 400
撼地神牛 2010 8 500
鱼人守卫 2010 10 66
鱼人守卫 2010 9 66
鱼人守卫 2010 8 65要求返回结果
潮汐猎人 2010 9 1000
撼地神牛 2010 10 300
鱼人守卫 2010 10 66即按user_name分组后返回每组中距离现在日期最近的那一条记录的所有字段 一定要所有字段啊 求SQL
user_name,pay_year,pay_month,pay
===========================================
潮汐猎人 2010 9 1000
潮汐猎人 2010 8 800
潮汐猎人 2010 7 1200
撼地神牛 2010 10 300
撼地神牛 2010 9 400
撼地神牛 2010 8 500
鱼人守卫 2010 10 66
鱼人守卫 2010 9 66
鱼人守卫 2010 8 65要求返回结果
潮汐猎人 2010 9 1000
撼地神牛 2010 10 300
鱼人守卫 2010 10 66即按user_name分组后返回每组中距离现在日期最近的那一条记录的所有字段 一定要所有字段啊 求SQL
from user_info u
where not exists(select * from user_info where user_name=u.user_name
and pay_year*12+pay_month>u.pay_year*12+u.pay_month)
from user_info
group by username,max(pay_year),max(pay_month)
2 from user_info t
3 where exists
4 (select user_name, max(pay_year || lpad(pay_month, 2, '0'))
5 from user_info b
6 where b.user_name = t.user_name
7 group by user_name
8 having max(pay_year || lpad(pay_month, 2, '0')) = t.pay_year || lpad(t.pay_month, 2, '0'));
USER_NAME PAY_YEAR PAY_MONTH PAY
---------- -------- --------- -----------
潮汐猎人 2010 9 1000
撼地神牛 2010 10 300
鱼人守卫 2010 10 66
SQL>
SQL> select user_name, pay_year, pay_month, pay
2 from (select t.*,
3 row_number() over(partition by user_name order by pay_year desc, pay_month desc) rn
4 from user_info t)
5 where rn = 1
6 ;
USER_NAME PAY_YEAR PAY_MONTH PAY
---------- -------- --------- -----------
潮汐猎人 2010 9 1000
撼地神牛 2010 10 300
鱼人守卫 2010 10 66
SQL>
SELECT user_name,pay_year,pay_month,pay FROM (
SELECT user_name,pay_year,pay_month,pay,
Row_Number()over(PARTITION BY user_name ORDER BY pay_year||to_char(To_Number(pay_month),'00') desc) rn FROM user_info
)
WHERE rn=1 ;
select username,pay_year,pay_month,pay
from
(select username,pay_year,pay_month,pay,
row_number() over(partition by username order by to_number(pay_year||pay_month) desc) rn
from user_info)
where rn=1