Это SQL-версия отчета панели управления по сообщениям.
Этот отчет предоставляет ежедневное количество сообщений, созданных в указанном диапазоне дат. Он предназначен для отслеживания активности в обычных темах, исключая сообщения из личных переписок и других специальных архетипов.
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date AS "День",
COUNT(p.id) AS "Количество"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
AND p.deleted_at ISNULL
AND t.archetype = 'regular'
AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1
Пояснение к SQL-запросу
- Параметры:
- Запрос принимает два параметра:
:start_dateи:end_date, которые определяют диапазон дат для отчета. Оба параметра даты принимают форматYYYY-MM-DD.
- Запрос принимает два параметра:
SQL-запрос выполняет следующие операции:
- Выборка данных:
- Выбирается дата (
created_at::date) создания каждого сообщения, которая приводится к формату даты, чтобы игнорировать компонент времени. - Также подсчитывается количество сообщений (
COUNT(p.id)), созданных в каждый день.
- Выбирается дата (
- Соединения:
- Запрос соединяет таблицу
postsс таблицейtopicsс помощьюINNER JOIN. Это соединение гарантирует, что учитываются только сообщения, связанные с существующими темами. - Исключаются любые темы, которые были удалены (
t.deleted_at ISNULL).
- Запрос соединяет таблицу
- Фильтры:
- Сообщения фильтруются так, чтобы включать только те, которые находятся в указанном диапазоне дат (
p.created_at::date BETWEEN :start_date AND :end_date). - Исключаются удаленные сообщения (
p.deleted_at ISNULL). - Результаты ограничиваются сообщениями из обычных тем (
t.archetype = 'regular'). - Учитываются только сообщения с
p.post_type = 1, исключая действия модераторов, шепот и сообщения типа small_action.
- Сообщения фильтруются так, чтобы включать только те, которые находятся в указанном диапазоне дат (
- Группировка и сортировка:
- Результаты группируются по дате создания сообщения (
GROUP BY p.created_at::date). - Итоговый вывод сортируется по дате в порядке возрастания (
ORDER BY 1), где1ссылается на первый столбец в оператореSELECT, то есть на дату.
- Результаты группируются по дате создания сообщения (
Пример результатов
| День | Количество |
|---|---|
| 2023-11-12 | 25 |
| 2023-11-13 | 35 |
| 2023-11-14 | 38 |
| 2023-11-15 | 47 |
| 2023-11-16 | 36 |
| 2023-11-17 | 79 |
| … | … |