Существует список транзакций пользователей. Каждый пользователь имеет несколько транзакций. Я написал следующий код, чтобы найти самые последние транзакции пользователей, а затем выбрать пользователей, у которых не было транзакций за последние семь дней или более, но я не знаю, какова сложность времени моего кода. Может ли кто-нибудь объяснить, как я могу развить временную сложность моего кода?
trans_date - дата транзакции.
select user_id,_date,datediff(curdate(),_date)
from(
select t1.send_id as user_id,from_unixtime(t1.trans_date) as _date
from transactionhistory as t1
where from_unixtime(t1.trans_date) =
(select max(from_unixtime(t2.trans_date))
from transactionhistory as t2
where t2.send_id = t1.send_id)) as tab
where datediff(curdate(),_date) > 7;
Вот вывод команды EXPLAIN
Правильно ли этот запрос?
Чтобы обрабатывать каждого пользователя, тогда самый внутренний запрос должен быть from... t2 where t2.send_id = t1.send_id
. Если это не вы, вы выбираете только самую новую запись одного пользователя с последней транзакцией в целом.
Я думаю, что это будет O (n ^ 2). Внешняя петля O (n) и внутренняя петля O (n).