Недавно я реализую функцию для подсчета количества новых пользователей и новых заказов каждый день с учетом дат начала и окончания, как показано на рисунке:
Сравнение начинается глупо, используется метод:
- Сначала рассчитайте список промежуточных дат на основе времени начала и окончания
- Просмотрите список, получите текущую дату и следующую дату и запросите количество пользователей и заказов, добавленных за этот период.
Можно предположить, что эффективность такого рода запросов чрезвычайно низка. К счастью, в SQL есть оператор SQL, который как раз соответствует этому требованию. Например, если мне нужно запросить количество новых заказов, добавляемых в таблицу заказов каждый день, я можно написать оператор запроса следующим образом:
- Статистика в днях
SELECT DATE_FORMAT(created_at, “%Y-%m-%d” ) , COUNT( * ) FROM order_table WHERE status = ‘SUCCESS’ GROUP BY DATE_FORMAT( created_at, “%Y-%m-%d” ) ;
- Статистика в часах
SELECT DATE_FORMAT(created_at, “%Y-%m-%d %H” ) , COUNT( * ) FROM order_table WHERE status = ‘SUCCESS’ GROUP BY DATE_FORMAT( created_at, “%Y-%m-%d %H” ) ;
Таким образом, все необходимые данные могут быть получены с помощью одного оператора запроса, и эффективность значительно повышается.