Рассчитайте аналог Retention Rate по неделям для компаний-заказчиков. Объедините компании в когорты по неделе их первого заказа (поле order_date). Возвращение определяйте по наличию заказа в течение текущей недели.

Перед тем как выделить неделю из даты, приведите значения к типу timestamp. Значение Retention Rate округлите до двух знаков после запятой.

WITH 
    t_1 AS (SELECT c.order_id,
                   c.customer_id,
                   c.cohort_dt, 
                   COUNT(c.order_id) OVER(PARTITION BY c.cohort_dt) AS cohort_users_cnt
            FROM (SELECT DISTINCT order_id, 
                         customer_id,
                         FIRST_VALUE(DATE_TRUNC('week', order_date)) OVER 
                           (PARTITION BY order_id ORDER BY DATE_TRUNC('week', order_date))::timestamp AS cohort_dt
                  FROM northwind.orders) AS c
                 ),
    t_2 AS (SELECT order_id,
                   customer_id,
                   DATE_TRUNC('week', order_date)::timestamp AS purchase_date
            FROM northwind.orders
            ORDER BY customer_id)

SELECT DISTINCT cohort_dt,
        purchase_date,
        COUNT(t_2.order_id) OVER(PARTITION BY t_1.cohort_dt, t_2.purchase_date) AS users_cnt, 
        cohort_users_cnt, 
        ROUND(COUNT(t_2.order_id) OVER(PARTITION BY t_1.cohort_dt, t_2.purchase_date)::numeric / cohort_users_cnt * 100, 2) AS retention_rate
FROM t_2 
JOIN t_1 ON t_1.customer_id = t_2.customer_id
ORDER BY t_1.cohort_dt, t_2.purchase_date

Результат

cohort_dt purchase_date users_cnt cohort_users_cnt retention_rate
1996-07-01 00:00:00 1996-07-01 00:00:00 2 2 100
1996-07-01 00:00:00 1996-08-05 00:00:00 1 2 50
1996-07-01 00:00:00 1996-09-02 00:00:00 1 2 50
1996-07-01 00:00:00 1997-02-03 00:00:00 1 2 50
1996-07-01 00:00:00 1997-02-10 00:00:00 1 2 50
1996-07-01 00:00:00 1997-05-26 00:00:00 1 2 50
1996-07-01 00:00:00 1997-07-21 00:00:00 1 2 50

Слишком много строк в полученном результате.