我被一个相当简单的问题所困扰。
我有一个包含三列,日期,customer_ids和状态的表。我们正在使用它来跟踪客户ID的状态 - 可以是付款,试用或过期。因此,每个客户ID从系统登录时开始每天重复
我想运行一个查询,计算从试用到付款的custids数量。我已经加入了表格或使用了子查询等,但似乎没有什么能给我正确的结果。
date custid status
2018/1/1 1 trial
2018/1/2 1 trial
2018/1/3 1 paying
2018/1/1 2 trial
2018/1/1 2 trial
2018/1/1 2 expired
答案 0 :(得分:0)
假设你只是从试用到付款一次(即一旦你购买它就无法开始新的试用),你可以做到
select count(1)
from ( select distinct custid
from foo
where status = 'paying' ) P
inner join ( select distinct custid
from foo
where status = 'trial') T On P.custid = T.custid
如果您想限制日期范围,请将其添加到生成P
的内部子选择
答案 1 :(得分:0)
根据您的示例数据,您只需按'paying'
进行过滤即可。让我假设一旦有人付款,他们就有多行。
如果我认为一旦有人付款,他们就永远不会回去。然后,您希望获得免费试用的客户的最低付款日期:
select min_paid_date, count(*)
from (select custid, min(case when status = 'paying' then date end) as min_paid_date
from t
group by custid
having sum( status = 'trial' ) > 0
) c
group by min_paid_date;
答案 2 :(得分:0)
这会计算从一天“试用”过渡到第二天“付款”的客户发生次数。
SELECT
COUNT(*)
FROM
yourTable trials
INNER JOIN
yourTable paying
ON paying.custid = trials.custid
AND paying.date = trials.date + 1
WHERE
trials.status = 'trial'
and paying.status = 'paying'