2017-01-07 1 views
0

У меня есть таблица вроде этого ...Msql выбрать один из каждого

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' 

Благодарим заранее.

ответ

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; 

Одна вещь, чтобы отметить здесь, если есть несколько строк с таким же максимальным временем, запрос отобразит их все.

+0

спасибо, ваш ответ поможет мне так много .. –

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'); 
Смежные вопросы