# Отчет по панели управления — уведомить модераторов

**URL:** <https://meta.discourse.org/t/dashboard-report-notify-moderators/291887>\
**Category:** Data & reporting\
**Tags:** sql-query, dashboard-reports, dashboard-sql\
**Created:** [17.Январь.2024 02:12:12 UTC](https://meta.discourse.org/t/dashboard-report-notify-moderators/291887 "2024-01-17T02:12:12Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![SaraDev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/saradev/32/335139_2.png) [@SaraDev](https://meta.discourse.org/u/SaraDev)\
**Post date:** [17.Январь.2024 02:12:12 UTC](https://meta.discourse.org/t/dashboard-report-notify-moderators/291887/1 "2024-01-17T02:12:12Z")

</div>

Это SQL-версия отчёта панели управления для оповещения модераторов.

Данный отчёт панели управления предоставляет ежедневное количество частных сообщений, отправленных модераторам с подтипом уведомления `notify_moderators`. Это позволяет администраторам понимать периоды высокой нагрузки на внимание модераторов и может указывать на моменты, когда пользователи сталкиваются с проблемами, требующими помощи модерации.

```sql
-- [params]
-- date :start_date = 2023-12-15
-- date :end_date = 2024-01-16

SELECT
  DATE(created_at) AS day,
  COUNT(1) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
  AND subtype = 'notify_moderators'
  AND created_at BETWEEN :start_date AND :end_date
  AND deleted_at IS NULL
  AND user_id > 0
GROUP BY DATE(created_at)
ORDER BY day  

```

## Объяснение SQL-запроса

Запрос работает путём извлечения данных из таблицы `topics` — конкретно тех записей, которые соответствуют частным сообщениям модераторам в заданный промежуток времени. Давайте разберём его:

- **Параметры даты** :
  - Запрос принимает два параметра: `:start_date` и `:end_date`, которые определяют диапазон дат для отчёта. Оба параметра даты принимают формат `ГГГГ-ММ-ДД`.

- **Выборка и подсчёт** :
  - `DATE(created_at)` преобразует временную метку `created_at` в формат даты и присваивает ей псевдоним `day`. Это позволяет группировать и подсчитывать сообщения по дате их создания.
  - `COUNT(1)` используется для подсчёта количества записей за каждый день, присваивая этому подсчёту псевдоним `notifications_count`.

- **Критерии фильтрации** :
  - Запрос фильтрует только те записи, где `archetype` равен `'private_message'`, что гарантирует, что рассматриваются исключительно сообщения, а не другие типы тем.
  - Подтип `subtype` ограничен значением `'notify_moderators'`, изолируя случаи, когда пользователи уведомляют или запрашивают помощь у модераторов.
  - Проверяется, что временная метка `created_at` сообщения находится между указанными `:start_date` и `:end_date`.
  - Сообщения, которые были удалены (`deleted_at IS NULL`), исключаются из подсчёта, чтобы отчёт отражал только активные коммуникации.
  - Наконец, гарантируется, что сообщения связаны с действительным пользователем, путём проверки условия `user_id > 0`.

- **Группировка и сортировка** :
  - Запрос использует `GROUP BY DATE(created_at)` для агрегации результатов по каждому дню в заданном диапазоне дат.
  - Затем результаты сортируются хронологически с помощью `ORDER BY day`, что делает отчёт удобным для чтения и интерпретации.

### Пример результатов

| day | notifications\_count |
| --- | --- |
| 2023-12-17 | 3 |
| 2023-12-18 | 1 |
| 2023-12-21 | 1 |
| 2023-12-23 | 2 |
| 2023-12-26 | 1 |

---

_[View the full topic](https://meta.discourse.org/t/dashboard-report-notify-moderators/291887)._
