这是“通知版主”仪表板报告的 SQL 版本。
此仪表板报告提供已发送给版主的、具有通知子类型 notify_moderators 的私人消息的每日计数。这一洞察有助于管理员了解版主需要关注的高峰时段,并可能表明用户何时遇到需要版主协助的问题。
-- [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,它们定义了报告的日期范围。两个日期参数都接受YYYY-MM-DD格式的日期。
- 查询接受两个参数,
- 选择和计数:
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 |