2015-08-20 1 views
1

Я использую MySQL 5.5.37. У меня возникли проблемы с написанием запроса. У меня есть следующие столбцы данных ...Как написать запрос MySQL для группировки результатов при сохранении идентификаторов отдельных строк?

select distinct u.id, u.first_name, u.last_name, l.last_login_time … 

То, что я хочу, чтобы выбрать одну строку, в которой первое имя и фамилия являются уникальными для каждого последнего last_login_time. Таким образом, если выше запрос возвращает

ID FIRST_NAME LAST_NAME  LAST_LOGIN_TIME 
============================================= 
100 Jerry   Seinfeld  2015-07-01 
200 George  Costanza  2014-01-01 
300 Jerry   Seinfeld  2015-07-31 
400 George  Costanza  2015-05-05 
500 Elaine   Benes   2013-03-03 

Я хочу, чтобы мой измененный запрос для возврата

ID FIRST_NAME LAST_NAME  LAST_LOGIN_TIME 
============================================= 
300 Jerry   Seinfeld  2015-07-31 
400 George  Costanza  2015-05-05 
500 Elaine   Benes   2013-03-03 

Любые идеи, как я бы написать такой запрос?

ответ

2

Решение:

select t1.ID,t1.FIRST_NAME, t1.LAST_NAME, t.max_log 
    from Table1 t1 
    join (
     select FIRST_NAME, LAST_NAME, max(LAST_LOGIN_TIME) as max_log 
     from Table1 
     group by FIRST_NAME, LAST_NAME 
    ) t 
    on t.FIRST_NAME = t1.FIRST_NAME 
    and t.LAST_NAME = t1.LAST_NAME 
    and t.max_log = t1.LAST_LOGIN_TIME 
    order by t1.ID 

Я использую внутренний запрос, потому что я не знаю, как генерируются идентификаторы. Если выше дата означает более высокий ID, то мы могли бы удалить внутренний запрос и остаться с:

select max(ID), FIRST_NAME, LAST_NAME, max(LAST_LOGIN_TIME) as max_log 
from Table1 
group by FIRST_NAME, LAST_NAME 

DEMO HERE

0
SELECT DISTINCT u.firstname, MAX(lastlogintime) 
FROM tb 
GROUP BY u.firstname 
ORDER BY MAX(lastlogintine) DESC, u.firstname 
Смежные вопросы