よくある日付レポート(MTD、WoW、YoY)
date_truncと自己結合またはウィンドウ関数を使って、月初来、前週比、前年比のレポートを作成します。
「よくある日付レポート(MTD、WoW、YoY)」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
3つの基本的な期間レポート
ほぼすべてのビジネスダッシュボードで、次の集計が必要になります。
- MTD — 月初来
- WoW — 前週比
- YoY — 前年同期比
月初来
今月の現時点までの合計です。
SELECT SUM(total) AS mtd_revenue
FROM orders
WHERE created_at >= date_trunc('month', NOW())
AND created_at < date_trunc('month', NOW()) + INTERVAL '1 month';年初来
同じパターンを年単位で適用します。
SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());前週比
今週と前週を比較します。
SELECT
SUM(total) FILTER (
WHERE created_at >= date_trunc('week', NOW())
) AS this_week,
SUM(total) FILTER (
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week'
AND created_at < date_trunc('week', NOW())
) AS last_week
FROM orders
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week';前年同期比
同じ期間を前年の同じ期間と比較します。
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
WHERE created_at >= NOW() - INTERVAL '2 years'
GROUP BY 1
ORDER BY 1;
-- Then plot with two lines: current year, previous year.欠損のない日次系列
ある日に注文がなければ、GROUP BYはその日を省略します。完全なカレンダー系列を生成し、LEFT JOINします。
SELECT day, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(
CURRENT_DATE - INTERVAL '30 days',
CURRENT_DATE,
INTERVAL '1 day'
) AS day
LEFT JOIN orders o ON date_trunc('day', o.created_at) = day
GROUP BY day
ORDER BY day;累積合計
ウィンドウ関数を使うと、自己結合なしで累積合計を計算できます。
SELECT day,
revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;期間ごとの差分
LAGを使って前年同期比の成長率を計算します。
SELECT month,
revenue,
LAG(revenue, 12) OVER (ORDER BY month) AS prev_year,
(revenue - LAG(revenue, 12) OVER (ORDER BY month))
/ NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) AS yoy_growth
FROM monthly_revenue;直近7日/30日(移動ウィンドウ)
移動ウィンドウと暦に合わせた集計は異なります。ビジネス上の意味に合う方を選択してください。
-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';
-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());タイムゾーンに関する考慮事項
「今日」はユーザーのタイムゾーンによって異なります。切り捨てる前に変換してください。
SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
COUNT(*)
FROM events
GROUP BY 1;マテリアライズドビューによる事前集計
ページを読み込むたびにレポートを実行する場合は、1日1回だけマテリアライズしてください。詳しくはMaterialized Viewsで扱います。
振り返り
期間レポートはいくつかのパターンを基盤にしています。
- date_truncを使った半開区間
- 期間ごとのバケットを並行して作るFILTER
- 欠損日の補完にはgenerate_series + LEFT JOIN
- 期間ごとの差分にはLAG
確認問題
「今月の最初の瞬間」を示す式はどれですか?
AI チューターと学ぶ SQL — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 46
- レッスン
- 183
よくある質問
「よくある日付レポート(MTD、WoW、YoY)」レッスンは無料ですか?
はい。「よくある日付レポート(MTD、WoW、YoY)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「よくある日付レポート(MTD、WoW、YoY)」で何を学びますか?
date_truncと自己結合またはウィンドウ関数を使って、月初来、前週比、前年比のレポートを作成します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「よくある日付レポート(MTD、WoW、YoY)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 日付計算とINTERVAL
- EXTRACT、DATE_TRUNC、AGE
- タイムゾーン:TIMESTAMPとTIMESTAMPTZ
- よくある日付レポート(MTD、WoW、YoY)