Запрос Sql для выбора самых последних в одной или многих отношениях двух таблиц

0

У меня есть таблица отношений от одного до многих, такая как таблица клиентов и операций, как показано ниже Таблица клиентов

   Id  Name
   1   Customer 1
   2   Customer 2

Деятельность клиентов

Id  customer_id activity created

1      1       Login    2017-01-01 10:52:32
2      1       Logout   2017-01-01 11:75:32
3      2       Post     2017-01-02 10:11:10
4      2       LogOut   2017-01-02 09:11:10

Предположим, что у меня это повторяется до тысячи таблиц клиентов и действий клиентов. Как я могу написать один sql (используя Mysql), чтобы показать самую последнюю запись для каждого из клиентов, используя созданную дату, такую как результат работы ниже

Id  customer_id activity created

2      1       Logout   2017-01-01 11:75:32
3      2       Post     2017-01-02 10:11:10

пример должен выглядеть примерно так:

SELECT * 
FROM customer_activities 
WHERE created IN 
(
    SELECT MAX(created)
    FROM customer_activities 
    GROUP BY customer_id
);

Но вышеизложенное не вернуло требуемый результат.

Благодарю.

Теги:
database

1 ответ

2

Вы можете использовать подзапрос с агрегатом и join

select * 
from customer_activities  c
join (
   select customer_id, max(created) max_created
   from customer_activities 
   group by customer_id
) t on c.customer_id = t.customer_id and
       c.created = t.max_created

или in конструкции

select * 
from customer_activities  c
where (customer_id, created) in (
   select customer_id, max(created) max_created
   from customer_activities 
   group by customer_id
) 
  • 0
    Благодарю. Я предпочитаю что-либо «в конструкте», так как очень точный и чистый
  • 0
    @ IsaacFemi, пожалуйста

Ещё вопросы

Сообщество Overcoder
Наверх
Меню