У меня есть таблица отношений от одного до многих, такая как таблица клиентов и операций, как показано ниже Таблица клиентов
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
);
Но вышеизложенное не вернуло требуемый результат.
Благодарю.
Вы можете использовать подзапрос с агрегатом и 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
)