通过列值的更改来计算用户

时间:2018-02-10 20:57:20

标签: mysql sql

我被一个相当简单的问题所困扰。

我有一个包含三列,日期,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

3 个答案:

答案 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'