これは投稿のダッシュボードレポートのSQLバージョンです。
このレポートは、指定された期間内に作成された投稿の毎日のカウントを提供します。これは、通常のトピックでのアクティビティを追跡するように設計されており、プライベートメッセージやその他の特別なアーキタイプからの投稿は除外されます。
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date AS "Day",
COUNT(p.id) AS "Count"
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の2つのパラメータを受け入れます。両方の日付パラメータは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ステートメントの最初の列を参照します。
- 結果は投稿作成日(
結果例
| Day | Count |
|---|---|
| 2023-11-12 | 25 |
| 2023-11-13 | 35 |
| 2023-11-14 | 38 |
| 2023-11-15 | 47 |
| 2023-11-16 | 36 |
| 2023-11-17 | 79 |
| … | … |