我有一个包含
order_date
和 customer_id
字段的订单表,对于 2022 年及以后的每个日期,我想使用 SQL 计算 12 个月滚动的不同活跃客户。
我已经尝试过了
SELECT
order_date,
COUNT(DISTINCT customer_id) OVER (ORDER BY order_date RANGE INTERVAL '360' day PRECEDING) AS customers_12m
-- using a window function to create a 360d frame to count distinct customers during that time period
FROM
orders
WHERE
order_date >= '2021-01-01'
GROUP BY
order_date
HAVING
order_date >= '2022-01-01'
不知何故,我遇到了基于不同 DBMS 平台(Redshift、Exasol、Trino (Presto))的不同错误(不支持明显、不支持范围等)的问题。如果仅使用 SQL 就可以实现这一点,有人可以指导我吗?
输入样本
订单_日期 | 客户 ID |
---|---|
2023-01-01 | X |
2023-01-01 | 是 |
2023-01-02 | X |
2023-01-03 | X |
2023-01-04 | Z |
2023-01-05 | Z |
样本输出
这里假设 1 天,而不是 360 天
订单_日期 | customers_1d |
---|---|
2023-01-01 | 2(X 和 Y) |
2023-01-02 | 2(X 和 Y) |
2023-01-03 | 1(仅限 X) |
2023-01-04 | 2(X 和 Z) |
2023-01-05 | 1(仅限 Z) |
这不就能给你你想要的吗?
SELECT
order_date,
COUNT(DISTINCT customer_id)
FROM
orders
WHERE
order_date >= '2021-01-01'
GROUP BY
order_date