【发布时间】:2021-07-13 10:14:20
【问题描述】:
我有一个看起来像这样的事务表。
| userid | orderDate | amount |
|---|---|---|
| 111 | 2021-11-01 | 20 |
| 112 | 2021-09-07 | 17 |
| 111 | 2021-11-21 | 17 |
我想计算本月从我们商店购买的不同客户(用户 ID)有多少在上个月从我们商店购买。例如,在 2020 年 2 月,我们有 20 位客户,在这 20 位客户中,有 7 位也是在 2020 年 1 月的上个月从我们的商店购买的。我想在之前的所有月份都这样做,所以最终得到类似的结果。
| year | month | repeated customers |
|---|---|---|
| 2020 | 01 | 11 |
| 2020 | 02 | 7 |
| 2020 | 03 | 9 |
我已经写了这个,但这仅适用于当前月份。我将如何迭代或重写它以获得如上所示的表格。
WITH CURRENT_PERIOD AS (
SELECT DISTINCT userid
FROM table1
WHERE DATE(orderDate) BETWEEN DATE_TRUNC(CURRENT_DATE(),MONTH) AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
),
PREVIOUS_PERIOD AS (
SELECT DISTINCT userid
FROM table1
WHERE DATE(orderDate) BETWEEN DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH),MONTH) AND LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH))
)
SELECT count(1)
FROM CURRENT_PERIOD RC
WHERE RC.userid IN (SELECT DISTINCT userid FROM PREVIOUS_PERIOD)
【问题讨论】:
标签: sql google-bigquery