我试图在过去9个月内按月计算红移中的用户保留队列。但是我遇到了一个问题,即下面查询中的月份队列没有进入正确的月份。
我要查询的数据类型是:
userid - varchar activated-varchar
这是我正在尝试运行的查询:
with by_month as
(SELECT
userid
DATE_TRUNC('month', cast ("activated" as date)) AS joined_month
FROM customers
GROUP BY 1, 2),
first_month as
(select userid,
joined_month,
FIRST_VALUE(order_month) OVER (PARTITION BY userid ORDER BY
joined_month asc rows unbounded preceding) AS first
FROM by_month),
months as (select userid,
joined_month,
first,
extract(month from (joined_month - first_month)) as month_number
from first_month)
SELECT
first as "cohort",
SUM(CASE WHEN month_number = '0' THEN 1 ELSE 0 END) AS " Month 0",
SUM(CASE WHEN month_number = '1' THEN 1 ELSE 0 END) AS " Month 1",
SUM(CASE WHEN month_number = '2' THEN 1 ELSE 0 END) AS " Month 2",
SUM(CASE WHEN month_number = '3' THEN 1 ELSE 0 END) AS " Month 3",
SUM(CASE WHEN month_number = '4' THEN 1 ELSE 0 END) AS " Month 4",
SUM(CASE WHEN month_number = '5' THEN 1 ELSE 0 END) AS " Month 5",
SUM(CASE WHEN month_number = '6' THEN 1 ELSE 0 END) AS " Month 6",
SUM(CASE WHEN month_number = '7' THEN 1 ELSE 0 END) AS " Month 7",
SUM(CASE WHEN month_number = '8' THEN 1 ELSE 0 END) AS " Month 8",
SUM(CASE WHEN month_number = '9' THEN 1 ELSE 0 END) AS " Month 9"
from months
where first_month >= '2018-08-01'
GROUP BY 1
ORDER BY 1 desc
当我得到结果时,我得到了几个不可能的数字:
如:
Cohort Month 0 Month 1
'2019-01-01' 95 120
我做了一些挖掘,发现月份数字没有被正确计算例如,对于'2019-01-01的队列,月份数量是正确捕获0,1和3,但是2正在错过归因于月份对修复有任何帮助,非常感谢谢谢!
现在,试试吧
SELECT userid, joined_month, first_month, month_number FROM months
WHERE first = '2019-01-01'
(随意添加其他列以深入研究问题)添加激活,order_month等,直到你得到正确处理它的原因。