with t(userid,money,dttime,year) as
(
select 1,200,to_date('2012-03-04','yyyy-mm-dd'),2012 from dual
union all select 1,200,to_date('2012-05-04','yyyy-mm-dd'),2012 from dual
union all select 2,200,to_date('2012-05-04','yyyy-mm-dd'),2012 from dual
union all select 2,200,to_date('2012-03-04','yyyy-mm-dd'),2012 from dual
)
select * from t where dttime=(select max(dttime) from t t1 where t.userid=t1.userid and t.year=2012);
/*
USERID MONEY DTTIME YEAR
---------- ---------- -------------- ----------
1 200 04-5月 -12 2012
2 200 04-5月 -12 2012
*/
解决方案 »
- 关于排序 state 字段值 1--5 ,如何排序成 值为5 的优先,剩下的按 日期排序?
- 怎么样连接数据库效率最好?
- 请教高手!mysql数据库转移到oracle数据库,通过odbc,但是查询处的汉字都是乱麻!
- where下用case when的问题
- 游标嵌套和循环嵌套的问题,快快来看:先把sql中pubs数据库的authors、titles、titleauthor三张表传到oracle中,执行下面的饿语句,总是
- 请问:oracle8174能否直接启用oracle816的数据库,而不用导出导入?
- 紧急求助!各位一定要帮忙!
- 自动配置工具时报错
- oracle与visal c++的问题,新手,盼赐教!
- 超巨量表,导入出错 在线等待
- 初学form的傻瓜问题
- 本地动态sql超过32k且用dbms_sql创建临时表也不够求高手帮忙!
--或者你这样写,结果一样的
with t(userid,money,dttime,year) as
(
select 1,200,to_date('2012-03-04','yyyy-mm-dd'),2012 from dual
union all select 1,200,to_date('2012-05-04','yyyy-mm-dd'),2012 from dual
union all select 2,200,to_date('2012-05-04','yyyy-mm-dd'),2012 from dual
union all select 2,200,to_date('2012-03-04','yyyy-mm-dd'),2012 from dual
)
select userid,money,dttime,year from (select row_number() over(partition by userid order by dttime desc) rn
,userid,money,dttime,year from t where year=2012) where rn=1;
/*
USERID MONEY DTTIME YEAR
---------- ---------- -------------- ----------
1 200 04-5月 -12 2012
2 200 04-5月 -12 2012
*/
where a.userid =b.userid and a.dttime>b.dttime;
查询结果:
取出 rn=1的记录即可