2016-08-17 42 views
-2

我有典型的电子商务数据与几个回头客,如:如何获取电子商务数据订单之间的持续时间?

customer_id, order_date 
1,    2016.05.01 
2,    2016.05.02 
3,    2016.05.03 
1,    2016.05.04 
2,    2016.05.05 
1,    2016.05.06 

而且我想输出是这样的:

customer_id,  1,   2,   3, 
1     2016.05.01 2016.05.04 2016.05.06 
1     2016.05.02 2016.05.05 
1     2016.05.03 

,然后我可以轻松地获得第一和第二次购买,等的时间这是在MySQL数据库中,如果有一个SQL查询,也很容易

谢谢,千电子伏

+1

你绝对要为你的问题指定生成数据透视表还是要计算列表中的天的各种命令的数量? SO有很多关于在mysql内部摆动的问题... – Shadow

+0

您打算在单行中返回多少个订单日期? – shawnt00

+0

我在该结果中看不到任何持续时间 – Strawberry

回答

2

在MySQL中,可能日Ë最简单的方法是使用变量和条件汇总:

select customer_id, 
     max(case when rn = 1 then order_date end) as order_date_1, 
     max(case when rn = 2 then order_date end) as order_date_2, 
     max(case when rn = 3 then order_date end) as order_date_3 
from (select t.*, 
      (@rn := if(@c = customer_id, @rn + 1, 
         if(@c := customer_id, 1, 1) 
         ) 
      ) as rn 
     from t cross join 
      (select @c := -1, @rn := 1) params 
     order by customer_id, order_date desc 
    ) t 
group by customer_id; 
+0

哇,谢谢!这与我想要的完全一致!非常感谢。该SQL看起来像中国人,但它的作品 – kevando