2017-01-20 9 views
1

У меня есть две таблицы, group и groupAccess. Один содержит информацию для каждой «группы», а другой содержит все время доступа к группе, в том числе уникальный идентификатор и временную метку.Заказ таблицы MySQL с использованием метки времени из другой таблицы

Моя цель - заказать все группы в последний раз, когда они были доступны.

У меня есть половина пути, этот запрос позволяет мне получить все группы в правильном порядке, однако есть повторяющиеся группы, которые мне нужно удалить.

SELECT a.* 
FROM groups a 
INNER JOIN groupAccess b ON a.group_id = b.group_access_id 
ORDER BY access_time DESC 

Я попытался с помощью GROUP BY или DISTINCT, однако это нарушает (в настоящее время) правильный порядок групп. Как я могу это исправить?

ответ

1

Используйте max() и GROUP BY, чтобы найти самое последнее время доступа для каждой группы, а затем присоединитесь к этой таблице с помощью group. То есть:

SELECT 
    a.* 
    , b.last_access_time 
FROM 
    groups a 
    INNER JOIN (
     select 
      group_access_id 
      , max(access_time) as last_access_time 
     from groupAccess 
     group by 
      group_access_id 
    ) b ON a.group_id = b.group_access_id 
ORDER BY b.last_access_time DESC