MSQL选择其中一个

时间:2017-01-07 06:56:52

标签: mysql greatest-n-per-group

我有一张这样的桌子......

username     action   time
user1        login    00.00.00
user1        logout   01.00.00
user2        login    02.00.00

我想在02.00.00选择每个用户名的最后一个操作,所以它必须是这样的..

user1 logout
user2 login

我试过这个,但看起来还没完成。

select (distinct username), action from log where date(time) <= '02.00.00'

提前谢谢你。

3 个答案:

答案 0 :(得分:1)

您可以在子查询中找到每个用户的最长时间,并将内部表连接到主表中,如下所示:

select a.*
from log a
inner join (
    select username, max(time) time
    from log
    where time <= '02.00.00'
    group by username
) b on a.username = b.username
    and a.time = b.time;

这里要注意的一件事是,如果有多个行具有相同的最大时间,则查询将显示所有这些行。

答案 1 :(得分:0)

使用子查询

select username,action from log where time in( select max(time) from log group by username);

使用时间段:

select username,action from log where time in( select max(time) from log group by username having time < '2.00.00');

答案 2 :(得分:0)

试试这个

 select * from (select * from log order by time desc) log group by username;

check on sqlfiddel