首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

怎么实现如上需求

2013-01-02 
如何实现如下需求现有用户登录记录明细表user_login,记录部分字段如下:usernamelogin_timeA2012-9-1A2012-

如何实现如下需求
现有用户登录记录明细表user_login,记录部分字段如下:
username    login_time
A           2012-9-1
A           2012-9-3
A           2012-9-5
B           2012-9-3
A           2012-9-7
C           2012-9-6
D           2012-9-8
要求用sql执行过后的结果是:
username    login_time
B           2012-9-3
A           2012-9-7
C           2012-9-6
D           2012-9-8
以下是在mysql中执行情况,未达到我想要的结果,在oracle中无法实现,还请大侠们指教,谢谢了!!

我写的sql:
select username,login_time from user_login
group by username
结果是:
username    login_time
A           2012-9-1
B           2012-9-3
C           2012-9-6
D           2012-9-8
改sql:
select username,login_time from user_login
group by username order by login_time desc
结果是:
username    login_time
D           2012-9-8
C           2012-9-6
B           2012-9-3
A           2012-9-1
都不是我想要的结果,该如何实现呢?
[解决办法]

SELECT username,MAX(login_time) FROM user_login GROUP BY username

[解决办法]
with user_login as(
select 'A' username,to_date('2012-9-1','yyyy-mm-dd') login_time from dual
union all
select 'A',to_date('2012-9-3','yyyy-mm-dd') from dual
union all
select 'A',to_date('2012-9-4','yyyy-mm-dd') from dual
union all
select 'B',to_date('2012-9-3','yyyy-mm-dd') from dual
union all
select 'A',to_date('2012-9-7','yyyy-mm-dd') from dual
union all
select 'C',to_date('2012-9-6','yyyy-mm-dd') from dual
union all
select 'D',to_date('2012-9-8','yyyy-mm-dd') from dual
)select username,max(login_time) from user_login group by username;
USERNAME MAX(LOGIN_TIME)
-------- ---------------
D        2012/9/8
A        2012/9/7
B        2012/9/3
C        2012/9/6

[解决办法]
引用:
现有用户登录记录明细表user_login,记录部分字段如下:
username    login_time
A           2012-9-1
A           2012-9-3


A           2012-9-5
B           2012-9-3
A           2012-9-7
C           2012-9-6……


你这语句在oracle执行会报错的select username,login_time from user_login
 group by username order by login_time desc
login_time应该改成max(login_time)
[解决办法]

引用:
靠,写错了 ,更正如下
SELECT username,login_time FROM(
       SELECT username,login_time ,ROW_NUMBER(PARTITION BY username ORDER BY login_time DESC) AS RN FROM user_login) 
WHERE RN=1;

热点排行