| -- Customer metrics view built on daily aggregates | |
| CREATE OR REPLACE VIEW analytics.v_customer_metrics AS | |
| SELECT | |
| cd.customer_id, | |
| cd.activity_date, | |
| cd.order_count, | |
| cd.total_spend, | |
| cd.customer_segment, | |
| cd.activity_status, | |
| c.customer_name, | |
| c.registration_date, | |
| DATEDIFF('day', c.registration_date, cd.activity_date) AS customer_tenure_days, | |
| SUM(cd.total_spend) OVER ( | |
| PARTITION BY cd.customer_id | |
| ORDER BY cd.activity_date | |
| ROWS UNBOUNDED PRECEDING | |
| ) AS lifetime_value, | |
| ROW_NUMBER() OVER ( | |
| PARTITION BY cd.customer_id | |
| ORDER BY cd.activity_date DESC | |
| ) AS recency_rank | |
| FROM analytics.customer_daily cd | |
| JOIN staging.customers c | |
| ON cd.customer_id = c.customer_id | |
| WHERE cd.activity_date >= CURRENT_DATE - 365; | |