读书人

怎么实现如上需求

发布时间: 2013-01-02 13:08:44 作者: rapoo

如何实现如下需求
现有用户登录记录明细表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;

读书人网 >oracle

热点推荐