これはシステムダッシュボードレポートのSQLバージョンです。
このダッシュボードレポートは、システムによって自動的に送信された個人メッセージの数を日次でカウントします。
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-01-01
SELECT
DATE(created_at) AS day,
COUNT(*) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
AND subtype = 'system_message'
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テーブルからデータを抽出し、指定された期間内のsystem_messageサブタイプのユーザーへの個人メッセージとして適格なエントリを対象とします。以下に詳細を説明します。
- 日付パラメータ:
- クエリは、レポートの日付範囲を定義する
:start_dateと:end_dateの2つのパラメータを受け入れます。両方のdateパラメータはYYYY-MM-DDの日付形式を受け入れます。
- クエリは、レポートの日付範囲を定義する
- SELECT: クエリは2つのフィールドを選択します。
DATE(created_at) AS day:created_atタイムスタンプの日付部分を抽出し、レコードを作成日ごとに効果的にグループ化します。COUNT(*) AS notifications_count: 日ごとのシステム生成PMの総数をカウントします。
- FROM: すべてのトピック(個人メッセージを含む)のレコードを格納する
topicsテーブルをデータソースとして指定します。 - WHERE: データセットを絞り込むための複数のフィルターが含まれています。
archetype = 'private_message': 個人メッセージであるエントリのみを含めます。subtype = 'system_message': システム生成メッセージのみに選択をさらに絞り込みます。created_at BETWEEN :start_date AND :end_date: パラメータで指定された範囲内に作成されたPMをフィルターします。deleted_at IS NULL: 削除されたメッセージを除外します。user_id > 0: メッセージがシステムまたは匿名アカウントではなく、実際のユーザーアカウントに関連付けられていることを保証します。
- GROUP BY: 作成日ごとに結果をグループ化します。
- ORDER BY: 日ごとのカウントの時系列順序を保証するために、最終結果セットを日ごとに昇順で並べ替えます。
結果例
| day | notifications_count |
|---|---|
| 2024-01-01 | 5 |
| 2024-01-02 | 7 |
| 2024-01-03 | 11 |
| 2024-01-04 | 14 |
| 2024-01-05 | 8 |