Resku 示範資料

策略 / #8

CTR 比上週下滑超過 30% · 偵測

本週 CTR 比上週掉超過 30% 就提醒你,只通知不動手。

數字小者,衝突時優先
編輯 SQL

提醒

campaign_idnamectr_pctprev_ctr_pctchange_pct
6兒童書包・開學1.11.87-41.4

SQL

WITH weekly AS (
  SELECT campaign_id, CAST(FLOOR(ts / (7.0*86400)) AS INTEGER) AS wk,
         SUM(CASE WHEN metric='clicks'      THEN value END) AS clicks,
         SUM(CASE WHEN metric='impressions' THEN value END) AS impr
  FROM observations GROUP BY campaign_id, wk
),
ctr AS (
  SELECT campaign_id, wk, clicks / NULLIF(impr,0) AS ctr,
         LAG(clicks / NULLIF(impr,0)) OVER (PARTITION BY campaign_id ORDER BY wk) AS prev_ctr
  FROM weekly
),
latest AS (
  SELECT campaign_id, ctr, prev_ctr FROM ctr
  WHERE wk = (SELECT MAX(wk) FROM ctr cc WHERE cc.campaign_id = ctr.campaign_id)
    AND prev_ctr IS NOT NULL
)
SELECT c.id AS campaign_id, c.name,
       ROUND(l.ctr*100, 2) AS ctr_pct, ROUND(l.prev_ctr*100, 2) AS prev_ctr_pct,
       ROUND((l.ctr - l.prev_ctr)/l.prev_ctr*100, 1) AS change_pct
FROM latest l JOIN campaigns c ON c.id = l.campaign_id
WHERE (l.ctr - l.prev_ctr)/l.prev_ctr < -0.30
ORDER BY change_pct;