日期:2014-05-17  浏览次数:20928 次

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